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;
            }
        }
    }
    
  • 相关阅读:
    Android学习---- 十月
    第17章 使用PHP和MySQL实现身份验证
    第13章 MySQL高级编程
    第12章 MySQL高级管理
    第11章 使用PHP从Web访问MySQL数据库
    第10章 使用MySQL数据库
    第9章 创建Web数据库
    第5章 代码重用与函数编写
    NOIP模拟赛-奶牛晒衣服(dry)
    BZOJ1008 /乘法原理+快速幂 解题报告
  • 原文地址:https://www.cnblogs.com/wingyip/p/5495346.html
Copyright © 2011-2022 走看看