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,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.
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
List<Integer>[] bucket列表组的空间是n+1,因为可能出现最小0次、最大n次的情况。
[思维问题]:
想不到木桶排序:统计出现次数相同的情况,所以可以用。空间是n+1,因为可能出现最小0次
[英文数据结构或算法,为什么不用别的数据结构或算法]:
bucket.length - 1 index其实就是出现的次数
Map.getOrDefault(n, 0) 有就是前一个,没有就是后一个
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:

[一刷]:
- if (bucket[i] != null)链表非空才能加,否则NPE
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
想不到木桶排序:统计出现次数相同的情况,所以可以用。
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
[潜台词] :
class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
//initialization: result, HashMap, List<Integer> [] Bucket
List<Integer> result = new ArrayList<Integer>();
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
List<Integer> [] bucket = new List[nums.length + 1];
//corner case
if (nums == null || nums.length == 0 || k <= 0) return result;
//count the frequence into map
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
int n = map.get(nums[i]);
map.put(nums[i], n + 1);
}else {
map.put(nums[i], 1);
}
}
//put all the map's key into Bucket
for (int key : map.keySet()) {
if (bucket[map.get(key)] == null)
bucket[map.get(key)] = new ArrayList();
bucket[map.get(key)].add(key);
}
//get answer from Bucket
for (int i = bucket.length - 1; i >= 0 && result.size() < k; i--) {
if (bucket[i] != null)
result.addAll(bucket[i]);
}
//return
return result;
}
}
347. Top K Frequent Elements 最常用的k个元素的更多相关文章
- 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 = [ ...
- 347. Top K Frequent Elements (sort map)
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
- Top K Frequent Elements 前K个高频元素
Top K Frequent Elements 347. Top K Frequent Elements [LeetCode] Top K Frequent Elements 前K个高频元素
- 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. Example 1: Input: nums = [ ...
- 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
Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...
- [LC] 347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
随机推荐
- java 中Math 的常用方法
public class Demo{ public static void main(String args[]){ /** *Math.sqrt()//计算平方根 *Math.cbrt()//计算立 ...
- mvc项目用log4net 记录错误日志
1. 首先下载lognet 下载地址 http://logging.apache.org/log4net/download_log4net.cgi 2.找到bin文件中的net文件夹 之后看你电脑 ...
- 剑指offer 2.字符串 替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public class Re ...
- PostgreSQL获取所有表名、字段名、字段类型、注释
转载自:http://blog.csdn.net/cicon/article/details/51577655 获取表名及注释: select relname as tabname,cast(obj_ ...
- rtsp简介
https://wenku.baidu.com/view/b10415dabd64783e08122b9c.html 1 概要 RTSP(Real Time Streaming Protoc ...
- 我是一个录像机(NVR)
我是一个网络录像机,简称NVR.我的前辈是DVR,我们的区别很简单,DVR接的是模拟摄像机,我连接的是IP摄像机. 我的前辈DVR比我辛苦,因为模拟摄像机的模拟信号连过来之后,他要进行数字化.编码压缩 ...
- 浅读官方代码--ActionManager
用于管理节点的动作 { CCDirector* pDirector = CCDirector::sharedDirector(); //获得单例 pDirector->getActionMana ...
- Pycharm初始创建项目和环境搭建
Pycharm确实是一个非常不错的Python开发IDE,尤其对于初学者而言. 打开新建项目 1.选择新建一个Pure Python项目,新建项目路径可以在Location处选择. 2.Project ...
- rpm软件包、yum软件仓库、systemd初始化进程
rpm软件包.yum软件仓库.systemd初始化进程 作者:Eric 微信:loveoracle11g 红帽软件包管理器rpm (Redhat Package Manager) RPM会建立统一的数 ...
- SQLServer 清空某个库所有表
select @n=1 insert #temp(tablename) SELECT distinct sobjects.name FROM sysobjects sobjects WHERE sob ...