1. 程式人生 > >java返回N個數中最大的前M個數

java返回N個數中最大的前M個數

給定一個非空的整數陣列,返回其中出現頻率前 k 高的元素。 思路:將前k個數裝入佇列,向後遍歷,如果得到的數和佇列首的頻率進行比較,如果大於,則交換堆頂的元素和當前元素。直到遍歷完成

class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
        //對元素進行對映
        TreeMap<Integer, Integer> map = new TreeMap<>();
        for (int num : nums) {
             map.
put(num, !map.containsKey(num) ? 1 : map.get(num) + 1); } //給優先佇列傳入比較動作 PriorityQueue<Integer> pq = new PriorityQueue<>((Comparator.comparingInt(map::get))); for (Integer key : map.keySet()) { if (pq.size() < k) { pq.add(key); }
else if (map.get(key) > map.get(pq.peek())) { pq.remove(); pq.add(key); } } List list = new LinkedList<Integer>(); while (!pq.isEmpty()) { list.add(pq.remove()); } return list; } }

時間複雜度: 有n個元素: O(NlogM)