347. Top K Frequent Elements**
来源:互联网 发布:ubuntu配置tomcat环境 编辑:程序博客网 时间:2024/06/05 05:41
iven 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.
public List<Integer> topKFrequent(int[] nums, int k) { List<Integer>[] bucket = new List[nums.length+1]; Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int n:nums){ map.put(n, map.getOrDefault(n,0)+1); } for(int key: map.keySet()){ int frequency = map.get(key); if(bucket[frequency]==null) bucket[frequency] = new ArrayList<>(); bucket[frequency].add(key); } List<Integer> result = new ArrayList<>(); for(int pos = bucket.length-1;pos>=0&&result.size()<k;pos--){ if(bucket[pos]!=null){ result.addAll(bucket[pos]); } } return result; }Maxheap:
public List<Integer> topKFrequent(int[] nums, int k) { Map<Integer, Integer> map = new HashMap<>(); for(int n: nums){ map.put(n, map.getOrDefault(n,0)+1); } PriorityQueue<Map.Entry<Integer, Integer>> maxHeap = new PriorityQueue<>((a,b)->(b.getValue()-a.getValue())); for(Map.Entry<Integer,Integer> entry: map.entrySet()){ maxHeap.add(entry); } List<Integer> res = new ArrayList<>(); while(res.size()<k){ Map.Entry<Integer, Integer> entry = maxHeap.poll(); res.add(entry.getKey()); } return res; }什么意思:
PriorityQueue<Map.Entry<Integer, Integer>> maxHeap = new PriorityQueue<>((a,b)->(b.getValue()-a.getValue()));
Treemap:
public List<Integer> topKFrequent(int[] nums, int k) { Map<Integer, Integer> map = new HashMap<>(); for(int n: nums){ map.put(n, map.getOrDefault(n,0)+1); } TreeMap<Integer, List<Integer>> freqMap = new TreeMap<>(); for(int num : map.keySet()){ int freq = map.get(num); if(!freqMap.containsKey(freq)){ freqMap.put(freq, new LinkedList<>()); } freqMap.get(freq).add(num); } List<Integer> res = new ArrayList<>(); while(res.size()<k){ Map.Entry<Integer, List<Integer>> entry = freqMap.pollLastEntry(); res.addAll(entry.getValue()); } return res; }总结:根据红黑树进行实现,根据key的自然顺序进行排序。
0 0
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347.Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 347. Top K Frequent Elements
- 微信小程序精品demo:有调商城(礼物挑选神器)(适用1304)
- 设计模式之22 - 模板方法Template method
- MySQL入门之简单数据查询
- TFS 2015 敏捷开发实践 – 看板的使用
- Bluetooth---如何使用Android蓝牙开发
- 347. Top K Frequent Elements**
- 设计模式之23 - 访问者模式Visitor
- linux学习之混合编程
- 安卓漫漫路之碎片Fragment不同包下的区别.
- Swift3.0 URLSession学习笔记
- django初步学习
- 道歉信
- Jquery选择器
- HBASE教程