Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].
Note:
You may assume k is always valid, 1 ? k ? number of unique elements.
Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.
解法1: heap
比较直接的写法就是用heap,不过还有一种bucket sort的办法似乎更快,可以做到O(N)
C++1
Java
有一个Java8的compare写法可以掌握一下(a,b) -> a.getValue() - b.getValue()
|
|
解法2: Bucket 思想
基本的思路是,先用一个hashmap存储每一个num出现的次数。
然后最大的可能出现的次数就是nums的长度,所以可以用一个数组,每一个元素是一个list,记录当前频率下的所有数字。
这样以来,最后只需要从大到小的扫描一遍就可以得到答案了。
|
|