LeetCode Hot100 215.数组中的第k个最大元素

发布时间:2023年12月21日

题目

给定整数数组?nums?和整数?k,请返回数组中第?k?个最大的元素。

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

你必须设计并实现时间复杂度为?O(n)?的算法解决此问题。

方法一:内部 api 排序

class Solution {
    public int findKthLargest(int[] nums, int k) {
        Arrays.sort(nums);
        int n = nums.length;
        return nums[n - k];
    }
}

方法二:堆排序

class Solution {
    public int findKthLargest(int[] nums, int k) {
        PriorityQueue<Integer> heap = new PriorityQueue<>(); // 小顶堆
        for (int num : nums) {
            heap.offer(num);
            if (heap.size() > k)  // 让堆始终保持k个元素,多于k时让堆顶即最小的出
                heap.poll();  // 出堆顶,即最小的元素
        }
        return heap.peek();  // 返回堆顶元素
    }
}

小顶堆:每个节点的值都小于或等于其左右孩子的值

大顶堆:每个节点的值都大于或等于其左右孩子的值

文章来源:https://blog.csdn.net/qq_57349657/article/details/135135281
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。