var topKFrequent = function (nums, k) {
let map = new Map()
for (let i = 0; i < nums.length; i++) {
map.set(nums[i], (map.get(nums[i]) || 0) + 1)
}
console.log(map,Array.from(map))
let cntArr = []
let cnt2num = new Map()
for (let [num, cnt] of map) {
cntArr.push(cnt)
if (cnt2num.has(cnt)) {
let numArr = cnt2num.get(cnt)
numArr.push(num)
cnt2num.set(cnt, numArr)
} else {
cnt2num.set(cnt, [num])
}
}
const sortedCntArr = bucketSort(cntArr)
let res = []
for (let i = 0; i < k; i++) {
let numArr = cnt2num.get(sortedCntArr[i])
res = res.concat(numArr)
}
return [...new Set(res)]
};
function bucketSort(arr) {
const bucketSize = arr.length
const min = Math.min(...arr)
const max = Math.max(...arr)
const bucketCount = Math.floor((max - min) / bucketSize) + 1
const buckets = new Array(bucketCount).fill(0).map(() => [])
for (let i = 0; i < arr.length; i++) {
const pos = Math.floor((arr[i] - min) / bucketSize)
buckets[pos].push(arr[i])
}
for (let i = 0; i < buckets.length; i++) {
buckets[i].sort((a, b) => a - b)
}
let res = []
for (let i = 0; i < buckets.length; i++) {
res = res.concat(buckets[i])
}
return res.reverse()
}
console.log(topKFrequent([1, 2], 2))