美文网首页算法代码
数组中第K个最大元素

数组中第K个最大元素

作者: windUtterance | 来源:发表于2020-05-18 10:57 被阅读0次

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

示例
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
思路是创建一个小顶堆,将所有数组中的元素加入堆中,并保持堆的大小小于等于 k。这样,堆中就保留了前 k 个最大的元素。这样,堆顶的元素就是正确答案。
Java代码

class Solution {
    //自己写的,23333
    public int findKthLargest(int[] nums, int k) {
        if(nums.length == 0 || nums == null) return 0;
        Arrays.sort(nums);
        return nums[nums.length - k];
    }
    
    PriorityQueue(优先队列)通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的
    权值,都不大于其左右子节点的权值)。也就意味着可以通过数组来作为PriorityQueue的底层实现
    public int findKthLargest2(int[] nums, int k) {
        if(nums.length == 0 || nums == null) return 0;
        
        PriorityQueue<Integer> heap = new PriorityQueue<Integer>((n1, n2) -> n1 - n2);
        for(int n : nums) {
            heap.add(n);
            if(heap.size() > k) heap.poll();
        }

        return heap.poll();
    }
}

相关文章

网友评论

    本文标题:数组中第K个最大元素

    本文链接:https://www.haomeiwen.com/subject/dogyohtx.html