日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode: Top K Frequent Elements

發布時間:2025/7/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode: Top K Frequent Elements 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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.

很像majority element III, 但是那道題有O(k) extra space的限制,這里沒有。有任意extra space, 同時知道elem range情況下,bucket sort最節省時間

語法上注意第5行,建立一個ArrayList的array,后面沒有泛型generic

Time Complexity: O(N)

1 public class Solution { 2 public List<Integer> topKFrequent(int[] nums, int k) { 3 List<Integer> res = new ArrayList<Integer>(); 4 Map<Integer, Integer> freqMap = new HashMap<Integer, Integer>(); 5 ArrayList<Integer>[] bucket = new ArrayList[nums.length+1]; 6 7 for (int elem : nums) { 8 if (freqMap.containsKey(elem)) { 9 freqMap.put(elem, freqMap.get(elem)+1); 10 } 11 else { 12 freqMap.put(elem, 1); 13 } 14 } 15 for (int key: freqMap.keySet()) { 16 int freq = freqMap.get(key); 17 if (bucket[freq] == null) { 18 bucket[freq] = new ArrayList<Integer>(); 19 } 20 bucket[freq].add(key); 21 } 22 23 for (int i=bucket.length-1; i>=0 && res.size()<k; i--) { 24 if (bucket[i] != null) { 25 res.addAll(bucket[i]); 26 } 27 } 28 return res; 29 } 30 }

?

方法2: MaxHeap,?用map.entrySet(), return Map.Entry type, 可以調用getKey() 和 getValue()

Time Complexity: O(NlogN)

1 public class Solution { 2 public List<Integer> topKFrequent(int[] nums, int k) { 3 List<Integer> res = new ArrayList<Integer>(); 4 Map<Integer, Integer> freqMap = new HashMap<Integer, Integer>(); 5 6 for (int elem : nums) { 7 if (freqMap.containsKey(elem)) { 8 freqMap.put(elem, freqMap.get(elem)+1); 9 } 10 else { 11 freqMap.put(elem, 1); 12 } 13 } 14 15 Comparator<Map.Entry<Integer, Integer>> comp = new Comparator<Map.Entry<Integer, Integer>>() { 16 public int compare(Map.Entry<Integer, Integer> entry1, Map.Entry<Integer, Integer> entry2) { 17 return entry2.getValue() - entry1.getValue(); 18 } 19 }; 20 21 PriorityQueue<Map.Entry<Integer, Integer>> maxHeap = new PriorityQueue<Map.Entry<Integer, Integer>>(11, comp); 22 23 for (Map.Entry<Integer, Integer> each : freqMap.entrySet()) { 24 maxHeap.offer(each); 25 } 26 27 for (int i=1; i<=k; i++) { 28 res.add(maxHeap.poll().getKey()); 29 } 30 return res; 31 } 32 }

?

總結

以上是生活随笔為你收集整理的Leetcode: Top K Frequent Elements的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。