leetcode215,347堆之外其他解法

向下滚动可查看阅读进度

//347
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var topKFrequent = function(nums, k) {
    const map = new Map()
    for(const value of nums){
        map.set(value,(map.get(value)||0)+1)
    }
    const buckets=Array.from({length:nums.length+1},()=>[])//
    //最大出现次数可能等于 nums.length,而数组下标从 0 开始,所以长度要 nums.length + 1
    for(const [num,count] of map){
        buckets[count].push(num)
    }
    const res=[]
    for(let i=buckets.length-1;i>=0;i--){
        for(const num of buckets[i]){
            res.push(num)
            if(res.length===k){
                return res
            }
        }
    }
};
//215
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
    const quickSort = (arr) => {
        if(arr.length <= 1) return arr
        const flag = arr[arr.length - 1]
        const left = [], right = []
        for(let i = 0; i < arr.length - 1; i++) {
            if(arr[i] < flag) {
                left.push(arr[i])
            } else {
                right.push(arr[i])
            }
        }
        return [...quickSort(left), flag, ...quickSort(right)]
    }
    return quickSort(nums)[nums.length - k]
};