LeetCode 347 前K个高频元素

 

 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]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值