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

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

题目地址

代码:

class Solution {
    public void adjustHeap(int[] nums, int index, int len) {
        int tmp = nums[index];
        for (int i = index * 2 + 1; i < len; i=i*2+1) {
            if (i+1<len&&nums[i+1]>nums[i]) {
                i++;
            }
            if (tmp < nums[i]) {
                nums[index]=nums[i];
                index=i;
            } else {
                break;
            }
        }
        nums[index]=tmp;
    }

    public int findKthLargest(int[] nums, int k) {
        int result = 0;
        int len = nums.length;
        for (int i = len / 2 - 1; i >= 0; i--) {
            adjustHeap(nums, i, len);
        }
        int count=0;
        for(int i=len-1;i>=0;i--){
            count++;
            if (count==k){
                result=nums[0];
            }
            int tmp = nums[i];
            nums[i]=nums[0];
            nums[0]=tmp;
            adjustHeap(nums,0,i);
        }
        return result;
    }
}

 

上一篇:src\loadsave.cpp:738: error: (-215:Assertion failed) !_img.empty() in function ‘cv::imwrite‘


下一篇:leetcode 215. 数组中的第K个最大元素 实现最小堆 随机partition