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

题目

  • 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
    请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
    你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

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

示例 2:

输入: [-1,-1], k = 2
输出: -1

题解:桶排

  • 桶排(相同的放同一个桶),返回桶排的倒数第k个
var findKthLargest = function(nums, k) {
    const maxNum = Math.max(...nums);//找到数组中最大值
    const minNum = Math.min(...nums);//找到数组中最小值,解决负数情况
    const range = maxNum-minNum+1;
    const buckets = new Array(range).fill(0);//创建桶
    for(let num of nums){//放入桶
        buckets[num-minNum]++
    }
    //从后往前遍历,找第k大的元素
    for(let i=buckets.length-1;i>=0;i--){
        if(buckets[i]>0){
            k-=buckets[i];//k减去当前桶的次数
            if(k<=0){
                return i + minNum
            }
        }
    }
};
posted @ 2025-03-14 10:22  Frommoon  阅读(34)  评论(0)    收藏  举报