【Leetcode】Top K Frequent Elements
来源:互联网 发布:淘宝海外集运怎么用 编辑:程序博客网 时间:2024/05/29 18:46
题目链接:https://leetcode.com/problems/top-k-frequent-elements/
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.
思路:
定义一个类 保存一个num的值和频率,并实现比较方法
遍历数组,并用hashMap保存各个数字出现的频率
- 对hashmap的value集合排序,获取频率最高的k位
算法:
public List<Integer> topKFrequent(int[] nums, int k) { List<Integer> res = new ArrayList<Integer>(); Map<Integer,FEntity> map = new HashMap<Integer,FEntity>(); //统计各数字出现的次数 存入hashmap for(int t:nums){ FEntity f; if(map.containsKey(t)){ f = map.get(t); f.frequent++; }else{ f = new FEntity(t, 1); } map.put(t, f); } //对hashmap的value 按照频率进行排序 List<FEntity> values = new ArrayList<FEntity>(); Set<Integer> keys = map.keySet(); for(Integer key:keys){ values.add(map.get(key)); } Collections.sort(values); //统计频率最高的k个数 for(int i=0;i<k;i++){ res.add(values.get(values.size()-1-i).num); } return res; } class FEntity implements Comparable<FEntity> { int num, frequent; public FEntity(int num, int frequent) { this.num = num; this.frequent = frequent; } public int compareTo(FEntity arg0) { if (frequent > arg0.frequent) return 1; else if (frequent == arg0.frequent) return 0; else return -1; } }
1 1
- LeetCode|Top K Frequent Elements
- 【Leetcode】Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- [LeetCode] Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- 【leetcode】Top K Frequent Elements
- LeetCode Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- leetcode:Top K Frequent Elements
- LeetCode Top K Frequent Elements
- leetcode Top K Frequent Elements
- LeetCode: Top K Frequent Elements
- LeetCode Top K Frequent Elements
- [LeetCode] Top K Frequent Elements
- LeetCode : Top K Frequent Elements
- Leetcode Top K Frequent Elements
- [leetcode]Top K Frequent Elements
- LeetCode: Top K Frequent Elements
- Linux 如何在 vi 里搜索关键字
- oracle中的decode的使用
- IO 多路复用之 select、poll、epoll 详解
- 查询/设置Settings的值
- Struts2<s:iterator value="" var="lst">中var的使用和一些标签的使用体会
- 【Leetcode】Top K Frequent Elements
- Java实例初始化过程
- Spring Test 方式
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- sqlserver中的substring用法,oracle的substr,js中的substring
- Linux控制进程实战fork /vfork
- Android HandlerThread使用总结
- Android 判断root
- 关键字 restrict