标签:count map Elements num int Top bucket 347 new
My First PriorifyQueue Solution
This soltion use a Map to record the frequency of every number, and then use PriorityQueue to sort by frequency. The time complexity is O(nlogn), two pass.
class NumCount{ public NumCount(int num, int count){ this.num = num; this.count = count; } public int num=0; public int count = 0; } public int[] topKFrequent(int[] nums, int k) { Map<Integer, Integer> map = new HashMap<>(); for(int i=0;i<nums.length;i++){ map.putIfAbsent(nums[i], 0); map.put(nums[i], map.get(nums[i])+1); } PriorityQueue<NumCount> queue = new PriorityQueue<>((a, b)->b.count-a.count); Set<Integer> set = map.keySet(); for(int num: set){ NumCount n = new NumCount(num, map.get(num)); queue.add(n); } int[] res = new int[k]; for(int i=0;i<k;i++){ res[i]=queue.poll().num; } return res; }
My Second Bucket Sort Solution
The time conplexity is O(n), because the sorting has been done when put the numbers in buckets.
public int[] topKFrequent(int[] nums, int k) { List<Integer>[] bucket = new List[nums.length+1]; Map<Integer, Integer> map = new HashMap<>(); for(int i=0;i<nums.length;i++){ map.putIfAbsent(nums[i], 0); map.put(nums[i], map.get(nums[i])+1); } Set<Integer> set = map.keySet(); for(int num: set){ int freq = map.get(num); if(bucket[freq]==null){ bucket[freq]=new ArrayList<>(); } bucket[freq].add(num); } int[] res = new int[k]; int j=0; for(int i=bucket.length-1;i>=0;i--){ if(bucket[i]==null) continue; List<Integer> list = bucket[i]; for(int n: list){ if(j>=k) return res; res[j++]=n; } } return res; }
标签:count,map,Elements,num,int,Top,bucket,347,new 来源: https://www.cnblogs.com/feiflytech/p/15690959.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。