zoukankan      html  css  js  c++  java
  • [leetcode]347. Top K Frequent Elements

    这是leetcode第347题目

    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].

    题目意思:找出数组中前k个经常出现的元素。

    解题思路

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

    代码实现

    public 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;
            }
        }
    }
    
  • 相关阅读:
    【.Net】多语言查看MSDN
    【.Net】 显示星期字符串
    【.Net】 判断时间字符串正确性
    【.Net】 实现窗口拖动
    【.Net】 Winform 单例运行实例
    Kendo 计算字段
    Kendo UI 的 k-template
    UpdatePanel中用后台CS代码调用JS代码,先执行控件事件,后触发JS
    SQL常用
    Node.js 安装
  • 原文地址:https://www.cnblogs.com/wingyip/p/5495346.html
Copyright © 2011-2022 走看看