LeetCode Top K Frequent Elements

来源:互联网 发布:什么是数据库规范化 编辑:程序博客网 时间:2024/06/04 19:23

题意:给出一个数组,求出前k个出现频率最多的数

思路:首先统计每个元素的次数(用Map),然后用堆排序只统计前k个(PriorityQueue)

代码如下:

class Solution{    class Pair implements Comparable<Pair>    {        int key, value;        public int compareTo(Pair b)        {            return value - b.value;        }    }    public List<Integer> topKFrequent(int[] nums, int k)    {        Map<Integer, Integer> map = new HashMap<Integer, Integer>();        for (int i = 0; i < nums.length; i++)        {            if (map.containsKey(nums[i]))            {                map.put(nums[i], map.get(nums[i]) + 1);            }            else            {                map.put(nums[i], 1);            }        }        Comparator<Pair> cmp = new Comparator<Pair>()        {            public int compare(Pair a, Pair b)            {                return a.value - b.value;            }        };        Queue<Pair> queue = new PriorityQueue<Pair>(k, cmp);        for(Map.Entry<Integer, Integer> ele: map.entrySet())        {            Pair p = new Pair();            p.key = ele.getKey(); p.value = ele.getValue();            if (queue.size() < k)            {                queue.add(p);            }            else            {                if (p.compareTo(queue.peek()) > 0)                {                    queue.poll();                    queue.offer(p);                }            }        }        List<Integer> res = new ArrayList<Integer>();        while (!queue.isEmpty())        {            Pair p = queue.poll();            res.add(p.key);        }        Collections.sort(res);        return res;    }}


0 0
原创粉丝点击