347. Top K Frequent Elements

来源:互联网 发布:哈尔滨网络广播电视台 编辑:程序博客网 时间:2024/06/03 17:10

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.

解题思路:
1.数组循环一遍,把元素的出现次数都记录下来
2.对元素出现次数做降序排序
3.选择前k个元素输出为结果

class Solution {    public List<Integer> topKFrequent(int[] nums, int k) {        ArrayList<Element> elementList = new ArrayList<>();        //Map保存的是元素和elementList对应元素下标的键值对.空间换时间.        HashMap<Integer, Integer> number2IndexMap = new HashMap<>();        for (int i = 0; i < nums.length; i++) {            int num = nums[i];            if (number2IndexMap.containsKey(num)) {                //如果Map中已保存该num的键值对,则获取出来并且count自增.                int index = number2IndexMap.get(num);                elementList.get(index).count++;            } else {                //否则,新建一组键值对,保存到Map中.                Element element = new Element(num);                elementList.add(element);                number2IndexMap.put(num, elementList.size() - 1);            }        }        //降序排序elementList.        Collections.sort(elementList);        //把前面k个输出到resultList中.        List<Integer> resultList = new ArrayList<>();        for (int i = 0; i < k; i++) {            resultList.add(elementList.get(i).number);        }        return resultList;    }    /**     * 用来记录元素出现的次数     */    private static class Element implements Comparable<Element> {        public final int number;        public int count = 0;        public Element(int number) {            this.number = number;        }        @Override        public int compareTo(Element element) {            return element.count - this.count;        }    }}     * 用来记录元素出现的次数     */    private static class Element implements Comparable<Element> {        public final int number;        public int count = 0;        public Element(int number) {            this.number = number;        }        @Override        public int compareTo(Element element) {            return element.count - this.count;        }    }}
原创粉丝点击