题目描述

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

说明:

  • 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。

题解

思路

统计每个数出现的次数,根据出现的次数再得到数,即为最终结果。

代码

class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
List<Integer> res = new ArrayList();
// key为值 value为出现次数
HashMap<Integer,Integer> map = new HashMap();
// 统计每个数出现的次数
for(int i : nums){
map.put(i,map.getOrDefault(i,0)+1);
}
// list数组中每一个位置为这个数出现的次数 值为出现次数这么多的数
List<Integer>[] list = new List[nums.length+1];
for(int key : map.keySet()){
// 出现的次数
int i = map.get(key);
if(list[i]==null) list[i] = new ArrayList();
// 当前次数中 包含那些数
list[i].add(key);
}
for(int i=list.length-1;i>=0 && res.size()<k;i--){
if(list[i]==null) continue;
// 该题没有出现频率相同的数字 不需要考虑其他情况
res.addAll(list[i]);
}
return res;
}
}

最新文章

  1. BAT 批处理脚本 教程
  2. http tcp联系区别
  3. shell--学习 sed
  4. hihocoder 1228 Mission Impossible 6
  5. MySQL分区表例子——List分区
  6. 在world中批量调整图片的大小
  7. 关于安卓HTTP请求用HttpUrlConnection还是HttpClient好
  8. JavaScript Break 和 Continue 语句
  9. ORA-00119/ORA-00132
  10. Linux~上部署.net MVC出现的问题与解决
  11. python之turtle简单绘制学习
  12. 安装.Net Standard 2.0, Impressive
  13. ES系列十五、ES常用Java Client API
  14. JavaWeb基础之Servlet简单实现用户登陆
  15. js 把一个对象赋值给另一个对象会指向同一个内存地址
  16. 【linux】安装docker
  17. BearSkill纯代码搭建iOS界面
  18. 怎样使用 css 的@media print控制打印
  19. 2018.07.06 POJ 1459 Power Network(多源多汇最大流)
  20. MYSQL LOGBIN 数据日志恢复数据库随笔

热门文章

  1. vue 2.0 + elementUI 实现面包屑导航栏
  2. 2018 noip 考前临死挣扎
  3. Linux查看文件内容命令:more(转)
  4. requireJS文件夹
  5. POJ3126——Prime Path
  6. Ylmf_Ghost_Win7_SP1_x64_2017_0113.iso虚拟机安装
  7. DRP——重定向与转发
  8. c18---数组和指针
  9. python 数据的基本类型(字符串)
  10. WinForm中DataReader绑定到DataGridView的两种方法