博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
347. Top K Frequent Elements java solutions
阅读量:5101 次
发布时间:2019-06-13

本文共 1321 字,大约阅读时间需要 4 分钟。

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.

 to see which companies asked this question

1 public class Solution { 2     public List
topKFrequent(int[] nums, int k) { 3 HashMap
map = new HashMap
(); 4 ArrayList
[] bucket = new ArrayList[nums.length+1]; 5 for(int n : nums){ 6 map.put(n,map.get(n) == null ? 1 : map.get(n)+1); 7 } 8 for(int key : map.keySet()){ 9 int cnt = map.get(key);10 if(bucket[cnt] == null){11 bucket[cnt] = new ArrayList<>();12 }13 bucket[cnt].add(key);14 }15 List
ans = new ArrayList
();16 for(int i = bucket.length-1;i>=0;i--){17 if(bucket[i] != null){18 ans.addAll(bucket[i]);19 if(ans.size() >= k) break;20 }21 }22 return ans;23 }24 }

最初的想法是 使用hashmap 记录频率,之后再按频率大小逆序输出k个元素。之后参考 discuss 中的代码,使用bucket来降低时间复杂度达到O(n)。

转载于:https://www.cnblogs.com/guoguolan/p/5641116.html

你可能感兴趣的文章
Python 3.5 补充
查看>>
位运算的使用技巧
查看>>
Luogu P1850 换教室(NOIP 2016) 题解报告
查看>>
could not create the view: an unexcepted exception was thrown
查看>>
lua 元表
查看>>
AngularJS 模块& 表单
查看>>
Linux定时任务Crontab命令详解
查看>>
软件异常测试
查看>>
ntp -q 输出说明
查看>>
SQL 参数,传入参数和自己申明参数——异常抛出
查看>>
关于搜索引擎的几大核心算法浅析
查看>>
BZOJ 3159: 决战 解题报告
查看>>
[费用流][动态开边] 洛谷 P2050 美食节
查看>>
参数类型 (@Service层) interface 常用参数类型举例
查看>>
react页面跳转 window.location.href和window.open的几种用法和区别
查看>>
centos安装mysql5.6的正确姿态
查看>>
左值和右值
查看>>
10大java开元中文分词器
查看>>
type命令
查看>>
【转】字典转模型需要注意的问题,以及第三方框架来处理字典转模型
查看>>