[LeetCode] 347. Top K Frequent Elements 解题思路 - Java
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.
题目:给定一个非空数组,求出现次数最多的 k 个元素。
思路比较直接,
1. 将全部元素放到 Hashtable 里面,统计各个元素的出现次数
2. 将 Hashtable 里面的全部 Entry 拷贝一份到 List<Entry> 里面
3. 根据元素出现次数的值,对 List<Entry> 里面的元素进行排序
4. 将 List<Entry> 中出现次数的值最最大的前 k 个拷贝到一个新的 List<Integer> 中,得到结果
import static java.lang.System.out; import java.util.Collections;
import java.util.Comparator;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry; public class Solution { class Compartr implements Comparator<Entry<?, Integer>>{ @Override
public int compare(Entry<?, Integer> o1, Entry<?, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
} public List<Integer> topKFrequent(int[] nums, int k) {
Hashtable<Integer, Integer> key_cnt = new Hashtable<Integer, Integer>(); for(int key : nums){
if(key_cnt.containsKey(key)){
key_cnt.put(key, (Integer)key_cnt.get(key) + 1 );
}else{
key_cnt.put(key, 1);
}
} List<Entry<Integer, Integer>> list = new LinkedList<Entry<Integer, Integer>>(key_cnt.entrySet()); Compartr cpr = new Compartr();
Collections.sort(list, cpr); list.subList(k, list.size()).clear(); List<Integer> res = new LinkedList<Integer>(); Iterator<Entry<Integer, Integer>> iter = list.iterator(); int tmpk = k;
while(iter.hasNext() && tmpk > 0){
Entry<Integer, Integer> entry = iter.next();
res.add(entry.getKey());
} return res;
}
}
[LeetCode] 347. Top K Frequent Elements 解题思路 - Java的更多相关文章
- C#版(打败99.28%的提交) - Leetcode 347. Top K Frequent Elements - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- [leetcode]347. Top K Frequent Elements K个最常见元素
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
- [LeetCode] 347. Top K Frequent Elements 前K个高频元素
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
- 【LeetCode】347. Top K Frequent Elements 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 解题方法 字典 优先级队列 日期 题目地址:https://l ...
- Java [Leetcode 347]Top K Frequent Elements
题目描述: Given a non-empty array of integers, return the k most frequent elements. For example,Given [1 ...
- 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 ...
- [leetcode]347. Top K Frequent Elements 最高频的前K个元素
Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...
- 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 ...
- 347. Top K Frequent Elements (sort map)
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
随机推荐
- TCP/IP协议原理与应用笔记08:对等层和对等实体
1. 我们直接通过下面这个图,就可以直观了解: Outlook :收发邮件的软件组件. IE:浏览器. CutFTP:文件传输工具. 小结:因为为了完成不同的功能,所以会出现不同实体,这些不同的实体为 ...
- ASP.NET过滤器、URL重写
过滤器可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码.判断会话信息,也可以做权限控制. 一:编写过滤器,实现URL重写并配置过滤 编写过滤器,就是编写一 ...
- post 封装Map 发送请求
package com.j1.weixin.util; import java.io.IOException; import java.util.Map; import java.util.Set; ...
- Python之路,Day25-----暂无正在更新中
Python之路,Day25-----暂无正在更新中
- Camera类
Camera类 使用 Camera 类可从连接到运行 Flash Player 的计算机的摄像头中 捕获视频. 使用 Video 类可在本地监视视频. 使用 NetConnection 和 NetS ...
- HUD3336
/* 巧妙地使用fail数组 根据fail数组的定义 fail[i] 有 长度为i的子串最长公共前后缀为fail[i] 比如样例 fail 0 0 1 2 那么我们维护一个ans[i]表示到i位置的时 ...
- 给方法传递参数:ref参数和out参数
/*--------------------------------------------------- 给方法传递参数:ref参数和out参数 (P106) ------------------- ...
- 生成package.json和bower.json
1.安装nodejs 2.安装bower工具 cmd:npm bower install 3.生成package.json cmd:npm init 4.生成bower.json cmd:bow ...
- 使用jq深入研究轮播图特性
网站轮播图 太耳熟的词了 基本上做pc端的 主页绝壁会来一个轮播图的特效 轮播图他一个页面页面的切换,其实的原理是通过css的定位 ,定位到一起,第一张首先显示,其余默认隐藏. 今天我实现的这个轮播 ...
- C#设计模式-创建型模式(转)
一.简单工厂模式 简单工厂模式Simple Factory,又称静态工厂方法模式.它是类的创建模式.是由一个工厂对象决定创建出哪一种产品类的实例,是不同的工厂方法模式的一个特殊实现. 优点: u 模式 ...