leetcode347. Top K Frequent Elements--java
2018-03-03 23:57
281 查看
题目:Given a non-empty array of integers, return the k most frequent elements.For example,
Given
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.
给定一个非空数组,返回前k个出现频率最高的元素。
思路:
1. HashMap遍历数组nums[],得到每个元素的数组
2. 将HashMap中的记录,重新按照每个元素出现的次数,存放到list中,即bucket[i]中ki表示元素出现的个数,对应值bucket[ki]为元素值
3. 由于越靠后的元素,其出现的次数越多,因此,从后向前遍历k个非空bucket[],即为所求结果
程序:
class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> record = new HashMap<Integer, Integer>();
for(int i = 0; i < nums.length; i++){
if(record.containsKey(nums[i]))
record.put(nums[i], record.get(nums[i])+1);
else
record.put(nums[i],1);
}
List<Integer>[] bucket=new List[nums.length+1];
for(int key:record.keySet()){
int count=record.get(key);
if(bucket[count]==null)
bucket[count]=new ArrayList<Integer>();
bucket[count].add(key);
}
List<Integer> result=new ArrayList<Integer>();
for(int i=nums.length;i>0;i--)
{
if(bucket[i]!=null&&result.size()<k)
result.addAll(bucket[i]);
}
return result;
}
}
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.
给定一个非空数组,返回前k个出现频率最高的元素。
思路:
1. HashMap遍历数组nums[],得到每个元素的数组
2. 将HashMap中的记录,重新按照每个元素出现的次数,存放到list中,即bucket[i]中ki表示元素出现的个数,对应值bucket[ki]为元素值
3. 由于越靠后的元素,其出现的次数越多,因此,从后向前遍历k个非空bucket[],即为所求结果
程序:
class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> record = new HashMap<Integer, Integer>();
for(int i = 0; i < nums.length; i++){
if(record.containsKey(nums[i]))
record.put(nums[i], record.get(nums[i])+1);
else
record.put(nums[i],1);
}
List<Integer>[] bucket=new List[nums.length+1];
for(int key:record.keySet()){
int count=record.get(key);
if(bucket[count]==null)
bucket[count]=new ArrayList<Integer>();
bucket[count].add(key);
}
List<Integer> result=new ArrayList<Integer>();
for(int i=nums.length;i>0;i--)
{
if(bucket[i]!=null&&result.size()<k)
result.addAll(bucket[i]);
}
return result;
}
}
相关文章推荐
- 【LeetCode】347. Top K Frequent Elements——基于Java的解决方案
- [LeetCode] 347. Top K Frequent Elements 解题思路 - Java
- leetcode-java-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 -- JavaScript 代码
- leetcode 347. Top K Frequent Elements 解题报告
- LeetCode 347. Top K Frequent Elements
- [leetcode-347]Top K Frequent Elements(java)
- [leetcode] 347. Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- leetcode题解-347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements (Medium)
- 【leetcode】347. Top K Frequent Elements
- leetcode_347. Top K Frequent Elements 找出现频率最高的前k个元素
- LeetCode--347. Top K Frequent Elements(前K个高频元素)Python
- [leetCode刷题笔记]347. Top K Frequent Elements