leetcode347:Top K Frequent Elements(medium)
来源:互联网 发布:南宁知远科技有限公司 编辑:程序博客网 时间:2024/06/14 00:54
今天晚饭前又做了一道leetcode,今天真的是给自己放假了,学了一天习,非常充实,言归正传,这道题用到的思想就一个:桶排序!
题意:Given a non-empty array of integers, return the k most frequent elements
例如:Given [1,1,1,2,2,3]
and k = 2, return [1,2]
.
思想:1.创建一个HashMap,遍历一遍数组,key为数组中的数字,value为该数字出现的次数,2.之后,再创建一个“桶”用于排序,这个桶是一个二维数组,在java里就是ArrayList<ArrayList<Integer>>,初始化这个桶数组的大小是传入数组的大小再加1,因为。。。。(桶排序的原理不多介绍,大概意思就是二维数组的索引m对应的一维ArrayList<Integer>代表的是在传入的数组中出现m次的数字组成的数组!!!)3.再遍历一遍HashMap,从而可以完成这个二维数组的建立。4.最后一步便可倒序遍历这个二维数组,根据传入的k值,再从中选出k个出现次数最多的数字,返回即可。该算法就写完了,其实很简单,主要就是用HashMap统计数字及其出现次数,再桶排序!程序如下:
public List<Integer> topKFrequent(int[] nums, int k) { int size = nums.length; HashMap<Integer,Integer> map = new HashMap<Integer,Integer>(); for(int i=0;i<size;i++){ <span style="white-space:pre"></span>if(map.containsKey(nums[i])) <span style="white-space:pre"></span>map.put(nums[i], map.get(nums[i])+1); <span style="white-space:pre"></span>else <span style="white-space:pre"></span>map.put(nums[i], 1); } //初始化桶 ArrayList<ArrayList<Integer>> tong = new ArrayList<ArrayList<Integer>>(); for(int i=0;i<size+1;i++){ <span style="white-space:pre"></span>tong.add(new ArrayList<Integer>()); } //遍历HashMap,创建桶 for(Integer key : map.keySet()){ <span style="white-space:pre"></span>tong.get(map.get(key)).add(key); } <span style="white-space:pre"></span> //从桶中倒序遍历,选择出现最多的k个数字,add到result中,返回result即可 ArrayList<Integer> result = new ArrayList<Integer>(); int num = k; for(int i =size;i>=0;i--){ <span style="white-space:pre"></span>if(tong.get(i).size() <= 0) <span style="white-space:pre"></span>continue; <span style="white-space:pre"></span>else{ <span style="white-space:pre"></span>if(tong.get(i).size()<num){ <span style="white-space:pre"></span>num -= tong.get(i).size(); <span style="white-space:pre"></span>for(int j=0;j<tong.get(i).size();j++) <span style="white-space:pre"></span>result.add(tong.get(i).get(j)); <span style="white-space:pre"></span>} <span style="white-space:pre"></span>else{ <span style="white-space:pre"></span>for(int j=0;j<num;j++) <span style="white-space:pre"></span>result.add(tong.get(i).get(j));<span style="white-space:pre"></span>break; <span style="white-space:pre"></span>} <span style="white-space:pre"></span>} } return result; }
0 0
- leetcode347:Top K Frequent Elements(medium)
- Leetcode347 Top K Frequent Elements Medium (map, queue, pair)
- LeetCode347. Top K Frequent Elements
- LeetCode347—Top K Frequent Elements
- leetcode347 Top K Frequent Elements java
- LeetCode347. Top K Frequent Elements【map+priority_queue解法】
- 347. Top K Frequent Elements [medium] (Python)
- LeetCode 347. Top K Frequent Elements (Medium)
- leetcode 347[medium]--Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements (Medium) (cpp)
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- 有关位操作的总结
- leetcode 58. Length of Last Word
- HDOJ 2570 迷瘴
- 函数,指针与函数的关系,函数指针,指针函数
- C++中用rand()和srand()产生为随机数方法介绍
- leetcode347:Top K Frequent Elements(medium)
- 数据的逻辑结构和数据的物理结构
- 看来这是门技术活
- NPM来安装jquery
- key,unique index,联合索引
- 第一篇关于深度学习的博客
- EventBus 3 源码分析
- React Native环境搭建
- hdu 5493 Queue(逆序对,线段树)