[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 = [ ...
随机推荐
- Android(java)学习笔记230:服务(service)之绑定服务的细节
绑定服务的细节 1. 如果onbind方法返回值是null,onServiceConnect方法就不会被调用: 2. 绑定的服务,在系统设置界面,正在运行条目是看不到的: 3. 绑定的服务,不求同时生 ...
- struts2常用的常量constant(转)
原文地址:http://blog.csdn.net/wfcaven/article/details/5937548 常用的常量配置 struts.serve.static.browserCache ...
- .net mvc datatables中orderby动态排序
今天在做项目中用datatables的排序来做筛选,不过人比较懒,不想写那么多的关于排序的代码,于是寻思这在度娘上找找,结果不负有心人啊,更感谢贴出此贴的哥们,来源:http://blog.csdn. ...
- js面向对象--类式继承
//待研究//类式继承 //js中模拟类式继承的3个函数 //简单的辅助函数,让你可以将新函数绑定到对象的 prototype 上 Function.prototype.method = functi ...
- jq之简单表单验证
<body> <form method="post" action=""> <div class="int"& ...
- java 手动清理缓存的方法
有时候会感觉代码如何也查不出问题,可是缓存就是清好几遍了 这个时候就试试手动清理缓存 到你的编译路径下面 E:\java-workspace\wem\work\org\apache\jsp 手动删除你 ...
- JS 点击事件失效
有时候,会发现js失效 ,代码如果是如下的时候 <input type="button" onclick="change()"value="変更 ...
- propertychange input change
IE678 支持propertychange事件,可以监听所有属性(包括自定义属性)的改变事件,包括手动修改输入框文本以及js修改输入框文本. propertychange事件有个特点就是不支持冒泡, ...
- Java基础--多线程的方方面面
1,什么是线程?线程和进程的区别是什么? 2,什么是多线程?为什么设计多线程? 3,Java种多线程的实现方式是什么?有什么区别? 4,线程的状态控制有哪些方法? 5,线程安全.死锁和生产者--消费者 ...
- 使用BOOST BIND库提高C++程序性能
Boost.Bind为函数和函数对象,值语义和指针提供语义了一致的语法.我们首先通过一些简单的例子来看看它的基本用法,之后我们会延伸到嵌套绑定以实现功能组合.理解bind用法的一个关键是理解占位符(p ...