您的位置:首页 > 产品设计 > UI/UE

leetcode 347. Top K Frequent Elements 解题报告

2016-06-25 20:03 441 查看
题目链接

解题思路

使用Map将数字和对应的频率按照键值对存储起来

使用TreeMap和HashMap进行利用value值进行排序

按照题目要求输出前K大

使用的方法不够好。后面又使用了另外的方法另建一个对象存储数字和对应的频率,然后将此对象作为value存储在map和list中,对list进行排序。代码就不贴了。

解题代码

public class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
ValueComparator bvc =  new ValueComparator(map);
TreeMap<Integer,Integer> tmap = new TreeMap<Integer,Integer>(bvc);

List<Integer> list = new ArrayList<Integer>();
for(int i = 0;i<nums.length;i++){
if(map.containsKey(nums[i])){
map.replace(nums[i],map.get(nums[i])+1);
}else{
map.put(nums[i],1);
}
}
tmap.putAll(map);
Set set = tmap.keySet();
Iterator it = set.iterator();
while(it.hasNext() && k-- >0){
list.add((Integer) it.next());
}
return list;
}
class ValueComparator implements Comparator<Integer> {
Map<Integer,Integer> base;
public ValueComparator(Map<Integer,Integer> base) {
this.base = base;
}
public int compare(Integer a, Integer b) {
if(base.get(a)>=base.get(b)){
return -1;
}else{
return 1;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode