LeetCode 347 前K个高频元素

LeetCode 347 前K个高频元素_第1张图片

 

 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

你可能感兴趣的:(LeetCode,leetcode)