• LeetCode 215. 数组中的第K个最大元素


    //1.使用最小堆,或最大堆
    // 根据 k 的不同,选最大堆和最小堆,目的是让堆中的元素更小
    class Solution {
        public int findKthLargest(int[] nums, int k) {
            PriorityQueue<Integer> queue = new PriorityQueue<>();
            for(int num : nums){
                queue.add(num);
                //如果队列的容量已经超过 K个,那么弹出堆顶元素,内部的元素由堆来调整
                if(queue.size() > k){
                    queue.poll();
                }
            }
            return queue.peek();
        }
    }
    //2.使用快排
    class Solution {
        public int findKthLargest(int[] nums, int k) {
            int len = nums.length;
            int left = 0;
            int right = len - 1;
    
            int target = len - k;
            while(true){
                int index = partition(nums,left,right);
                if(index == target){
                    return nums[index];
                }else if( index < target){
                    left = index + 1;
                }else{
                    right = index - 1;
                }
            }   
        }
        public int partition(int[] nums,int left,int right){
            // pivot为基准位
            int pivot = nums[left];
            int j = left;
            for(int i = left + 1;i <= right;i++){
                if(nums[i] < pivot){
                    //小于 pivot 的元素 都被交换到前面
                    j++;
                    swap(nums,j,i);
                }
            }
            //在之前的遍历过程中,满足[left+1,j] < pivot, 并且(j,i] >= pivot
            swap(nums,j,left);
            //交换以后 [left,j - 1] < piovt , nums[j] = piovt,[j + 1,right] >= piovt
            return j;
        }
        //交换nums[i] 与 nums[j]的位置
        public void swap(int[] nums,int i,int j){
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }
  • 相关阅读:
    HTML5 jQuery图片上传前预览
    html5中form表单新增属性以及改良的input标签元素的种类
    PHP邮箱的正则表达式
    PHP手机号码正则表达式
    CSS中设置div垂直居中
    Linux服务器查看内存占用命令
    linux压缩解压文件
    网页是静态还是伪静态?
    帝国cms内容批量替换
    帝国CMS【操作类型】说明详解
  • 原文地址:https://www.cnblogs.com/peanut-zh/p/13911691.html
Copyright © 2020-2023  润新知