LeetCode:Top K Frequent Elements
2016-06-30 21:11
344 查看
Q:
Given a non-empty array of integers, return the k most frequent elements.
For example,
Given
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.
思路:遍历nums,
如果nums[i]不存在于HashMap中,则将nums[i]作为key,1作为value(代表第一次出现).
否则将nums[i]对应的value++.
然后将map存入list<Entry>中,以value降序排序,最后获取top k个entry即可. public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<>();
int i = 0, length = nums.length;
while (i < length) {
int num = nums[i++];
Integer count = map.get(num);
if (count == null) {
map.put(num, 1);
} else {
map.put(num, count + 1);
}
}
Set<Entry<Integer, Integer>> entrySet = map.entrySet();
List<Entry<Integer, Integer>> listToBeSorted = new ArrayList<>(entrySet);
Collections.sort(listToBeSorted, new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) {
return e2.getValue() - e1.getValue();
}
});
List<Integer> resultList = new ArrayList<>(listToBeSorted.size());
for (Entry<Integer, Integer> entry : listToBeSorted) {
if (k-- <= 0) {
break;
}
resultList.add(entry.getKey());
}
return resultList;
}
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.
思路:遍历nums,
如果nums[i]不存在于HashMap中,则将nums[i]作为key,1作为value(代表第一次出现).
否则将nums[i]对应的value++.
然后将map存入list<Entry>中,以value降序排序,最后获取top k个entry即可. public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<>();
int i = 0, length = nums.length;
while (i < length) {
int num = nums[i++];
Integer count = map.get(num);
if (count == null) {
map.put(num, 1);
} else {
map.put(num, count + 1);
}
}
Set<Entry<Integer, Integer>> entrySet = map.entrySet();
List<Entry<Integer, Integer>> listToBeSorted = new ArrayList<>(entrySet);
Collections.sort(listToBeSorted, new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) {
return e2.getValue() - e1.getValue();
}
});
List<Integer> resultList = new ArrayList<>(listToBeSorted.size());
for (Entry<Integer, Integer> entry : listToBeSorted) {
if (k-- <= 0) {
break;
}
resultList.add(entry.getKey());
}
return resultList;
}
相关文章推荐
- GUI编程 鼠标事件和键盘事件
- EasyUI——Combobox的onChange事件
- iOS --- UIView中的坐标转换
- Codeforces Round #360 (Div. 2) E. The Values You Can Make dp
- GUI编程 action事件
- Codeforces Round #360 (Div. 2) E. The Values You Can Make DP
- Values目录下的colors.xml内容
- LeetCode---Count Numbers with Unique Digits解题分析
- iOS GPUImage的介绍与GPUImagePicture(1)
- 关于apktool和jd-gui工具的使用
- getContextPath、getServletPath、getRequestURI、getRealPath的区别
- GUI编程 窗体事件
- JNI/NDK develop guide(1)
- ROS在ARDUINO的应用
- FPGArduino在DE2-35上的移植
- zTree && blockUI(2016-6-30)
- codeforces 688E E. The Values You Can Make(dp)
- Change Language in OS but keep Maya UI in English
- system design questions
- [置顶] UITableViewCell