zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    Scala(四)流程控制
    Scala(九)异常
    Idea中安装翻译插件
    hiveserver2启动卡住问题解决方案
    Scala(十)隐式转换
    Scala(七)集合
    Scala(六)面向对象
    Scala(八)模式匹配
    SharePoint 2010 文档库添加文件icon
    Windows Server 2008 r2 在Hyperv里搭建SharePoint 2010开发环境
  • 原文地址:https://www.cnblogs.com/peanut-zh/p/13911691.html
Copyright © 2011-2022 走看看