[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 条评论
登录 后参与评论

相关文章

来自专栏F_Alex

数据结构与算法(二)-线性表之单链表顺序存储和链式存储

前言:前面已经介绍过数据结构和算法的基本概念,下面就开始总结一下数据结构中逻辑结构下的分支——线性结构线性表

17920
来自专栏Java学习网

通常Java开发人员如何进行数据排序?

在实际工作中和平时学习中,以及分析开源Java项目的大量源代码后,我发现Java开发人员通常使用两种方法。一是使用Collections或 Arrays的 so...

252100
来自专栏java一日一条

如何用Map对象创建Set对象

Java中的Map和Set有不少相似之处。本文将分享一个把Map类转化成Set类的小技巧。

9210
来自专栏微信公众号:Java团长

Java HashMap的工作原理

面试的时候经常会遇见诸如:“java中的HashMap是怎么工作的”,“HashMap的get和put内部的工作原理”这样的问题。本文将用一个简单的例子来解释下...

6620
来自专栏Jed的技术阶梯

常见Java集合的实现细节(一):Map和Set的关系

这些接口和类名如此相似绝不是偶然的现象,实际上,这些Map集合的key有一个特征:所有的key不能重复,key之间没有顺序,也就是说,这些Map的key可以组成...

48820
来自专栏拭心的安卓进阶之路

Java 集合深入理解(14):Map 概述

终于把 List 常用的几种容器介绍完了,接下来开始 Map 的相关介绍。 什么是 Map Java 中的 Map 接口 是和 Collection 接口 同...

27580
来自专栏Java帮帮-微信公众号-技术文章全总结

【Java提高十七】Set接口集合详解

三、Set接口 Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行nu...

37490
来自专栏Celebi的专栏

C/C++ 学习笔记五(结构体、字符与字符串)

工作中经常使用到C/C++,为对C有个比较深刻的了解,重新拾起学习C的任务。在看书的同时,记录下思考的过程,也记录下重要的知识点。

52500
来自专栏老马说编程

(38) 剖析ArrayList / 计算机程序的思维逻辑

从本节开始,我们探讨Java中的容器类,所谓容器,顾名思义就是容纳其他数据的,计算机课程中有一门课叫数据结构,可以粗略对应于Java中的容器类,我们不会介绍所有...

22850
来自专栏于晓飞的专栏

读 Java Arrays 源码 笔记

Arrays.java是Java中用来操作数组的类。使用这个工具类可以减少平常很多的工作量。了解其实现,可以避免一些错误的用法。

10820

扫码关注云+社区

领取腾讯云代金券