leetcode 347. Top K Frequent Elements 解题报告

来源:互联网 发布:知乎中国出口构成 编辑:程序博客网 时间:2024/05/18 20:34

题目链接

解题思路

  1. 使用Map将数字和对应的频率按照键值对存储起来
  2. 使用TreeMap和HashMap进行利用value值进行排序
  3. 按照题目要求输出前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;            }             }     }}
0 0
原创粉丝点击