[LeetCode] 347. Top K Frequent Elements

【原题】 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个元素。 【思路】 思路一、hashmap统计频次,再对hashmap的value进行排序,取前面的k个最频繁的数。思路很简单,hashmap的value进行排序的过程,参照这里

public class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        Map<Integer,Integer> hash=new HashMap<>();
         List<Integer> list=new ArrayList<Integer>();
            for(int i=0;i<nums.length;i++){
            //可以使用hash.put(nums[i], hash.containsKey(nums[i])? hash.get(nums[i]) + 1 : 1);语句代替
                if(hash.containsKey(nums[i]))
                    hash.put(nums[i], hash.get(nums[i])+1);
                else hash.put(nums[i],1);
            }
            Comparator<Map.Entry<Integer, Integer>> byMapValues = new Comparator<Map.Entry<Integer, Integer>>() {
                @Override
                public int compare(Map.Entry<Integer, Integer> left, Map.Entry<Integer, Integer> right) {
                       return right.getValue().compareTo(left.getValue());//按照单词频率逆序排列
                }
            };
            List<Map.Entry<Integer, Integer>> sortedListMap = new ArrayList<Map.Entry<Integer, Integer>>(hash.entrySet());
            Collections.sort(sortedListMap, byMapValues);
            for(int i=0;i<k;i++)
                list.add(sortedListMap.get(i).getKey());
            return list;
    }
}

思路二、使用堆 java中PriorityQueue就是使用堆的思想来维护一个优先级。 没什么好说的,看这里吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

mysql explain 的extra中using index ,using where,using index condition,using index & using where理解

using where:查找使用了索引,不需要回表去查询所需的数据,查询结果是索引的一部分

501
来自专栏互扯程序

大牛:你真的懂反射吗?

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

1123
来自专栏CDA数据分析师

R语言字符串函数详解

一、以下为stringr包的字符串处理函数: 1. 字符串的大小写转换 str_to_upper(string, locale = “”) str_to_lo...

1996
来自专栏Danny的专栏

Java基础——Map接口

  通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的。下面就以K和V来代表键和值,来说明一下java中关于Map的几个问题。

662
来自专栏北京马哥教育

Mysql 架构和索引

字段类型选择 慷慨是不明智的 在相关的表中使用相同的数据类型,因为可能进行join 选择标示符:整数通常是最佳选择,尽量避免使用字符串 大致决定数据类型(数字,...

3209
来自专栏吴伟祥

java中的自动拆箱、装箱是指什么? 原

自动拆箱、装箱是从JDK1.5开始才有的特性,其实它主要就是指基本类型与包装类的自动转换。

572
来自专栏企鹅号快讯

MySQ基础入门系列之——字符与日期数据处理

今天这一篇分享MySQL中的字符串处理工具与日期时间处理,这一部分内容虽然看似不多,但是往往是输出处理中的的痛点。 我的MySQL数据库中已经建好了一个包含两列...

1760
来自专栏LanceToBigData

JavaSE(十)之反射

开始接触的时候可能大家都会很模糊到底什么是反射,大家都以为这个东西不重要,其实很重要的,几乎所有的框架都要用到反射,增加灵活度。到了后面几乎动不动就要用到反射。...

18710
来自专栏专注 Java 基础分享

揭秘 HashMap 实现原理(Java 8)

HashMap 作为一种容器类型,无论你是否了解过其内部的实现原理,它的大名已经频频出现在各种互联网面试中了。从基本的使用角度来说,它很简单,但从其内部的实现来...

2968
来自专栏程序员互动联盟

【java概念】String的常用方法

1、length() 字符串的长度   例:char chars[]={'a','b'.'c'};     String s=new String(chars)...

3438

扫码关注云+社区