1、数据结构
- 哈希表 frequency:用于统计各个不同数字的频率,数字为键,频率为对应的值。
- 二维数组 bucket:联想到之前的计数排序用到了桶,这里也可以用 数组的下标表示频率,数组内容表示对应的值,使用二维数组是为了防止有频率相同的数字。
2、首先对nums数组进行遍历,在frequency中对各个数字的频率进行统计。之后对frequency进行遍历,将出现频率为 i 的数字 n 存入数组,bucket[i].append(n)。最后由后向前遍历 bucket ,取后面k个数值即题目所求的前K个高频数字。
Go
func topKFrequent(nums []int, k int) []int {
var frequency map[int]int=make(map[int]int)
for _, v:=range nums{ frequency[v]+=1 }
var bucket [][]int=make([][]int, len(nums)+1)
var res []int
for k, v:=range frequency{ bucket[v]=append(bucket[v], k) }
for i, cnt:=len(bucket)-1, 0; i>=0 && cnt<k; i--{ res=append(res, bucket[i]...) }
return res[:k]
}