LeetCode 347. Top K Frequent Elements(最频繁的K个元素)
来源:互联网 发布:库存软件免费版 编辑:程序博客网 时间:2024/05/21 23:31
原题网址: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 --> frequency,和frequency --> nums
public class Solution { public List<Integer> topKFrequent(int[] nums, int k) { Map<Integer, Integer> frequency = new HashMap<>(); int max = 0; for(int num: nums) { Integer f = frequency.get(num); if (f == null) f = 1; else f ++; frequency.put(num, f); max = Math.max(max, f); } List<Integer>[] inverse = new List[max+1]; for(int num: frequency.keySet()) { int f = frequency.get(num); if (inverse[f] == null) inverse[f] = new ArrayList<>(); inverse[f].add(num); } List<Integer> result = new ArrayList<>(); for(int i=max; i>0; i--) { if (result.size() == k) break; if (inverse[i] == null) continue; for(int j=0; j<inverse[i].size(); j++) { if (result.size() == k) break; result.add(inverse[i].get(j)); } } return result; }}
方法二:对哈希映射计数表进行排序。
public class Solution { public List<Integer> topKFrequent(int[] nums, int k) { Map<Integer, Integer> frequency = new HashMap<>(); for(int num: nums) { Integer f = frequency.get(num); if (f == null) f = 1; else f ++; frequency.put(num, f); } int[] uniques = new int[frequency.size()]; int[] f = new int[uniques.length]; int i = 0; for(Map.Entry<Integer, Integer> entry: frequency.entrySet()) { uniques[i] = entry.getKey(); f[i] = entry.getValue(); i++; } Integer[] n = new Integer[uniques.length]; for(int j=0; j<n.length; j++) n[j] = j; Arrays.sort(n, new Comparator<Integer>() { @Override public int compare(Integer i1, Integer i2) { return Integer.compare(f[i2], f[i1]); } }); List<Integer> results = new ArrayList<>(); for(int j=0; j<k && j<n.length; j++) { results.add(uniques[n[j]]); } return results; }}
不合适使用摩尔投票算法,因为题目是找最频繁,而不是找频率超过1/k的数字。
0 0
- LeetCode 347. Top K Frequent Elements(最频繁的K个元素)
- 347. Top K Frequent Elements(找出数组中出现次数最多的前k个元素)
- LeetCode #347. Top K Frequent Elements
- [leetcode] 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements
- <LeetCode OJ> 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- LeetCode Everyday: 347. Top K Frequent Elements
- 【leetcode】347. Top K Frequent Elements
- leetcode 347.Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- [leetcode]347. Top K Frequent Elements
- LeetCode-347.Top K Frequent Elements
- Leetcode 347.Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- 【LeetCode】347. Top K Frequent Elements
- linux下如何使用systemctl管理systemd服务与单元
- Sicily|1721. Gray code[Special judge]
- 区块链走进教育机构,开设课程并且运用于学位证书
- appwidget桌面小部件
- poj2492 A Bug's Life (并查集拓展)
- LeetCode 347. Top K Frequent Elements(最频繁的K个元素)
- 双击Eclipse,弹出一个错误窗口: java.lang.IllegalStateException:
- CodeForces 609C Load Balancing
- 处理机调度
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- POJ2104 —— K-th number
- Netty
- 四:资讯列表实现(借助PullToRefres实现上拉和下拉刷新)
- C文件的基本知识