347 前 K 個高頻元素

2021-10-02 10:35:33 字數 1622 閱讀 8456

方法很好想,要麼暴力排序,歸併,堆排都能滿足o(nlogn)的要求。

我第一次想到的就是,用雜湊統計一下數字,然後過載排一下序,順序放入集合裡就行。

這次用的是最小堆,主要學習一下priorityqueue,是基於優先順序堆的無界優先順序queue

modifier and type

method and description

booleanadd(e e)將指定的元素插入到此優先順序佇列中。

voidclear()從此優先順序佇列中刪除所有元素。

comparatorcomparator()返回用於為了在這個佇列中的元素,或比較null如果此佇列根據所述排序natural ordering的元素。

booleancontains(object o)如果此佇列包含指定的元素,則返回true

iteratoriterator()返回此佇列中的元素的迭代器。

booleanoffer(e e)將指定的元素插入到此優先順序佇列中。

epeek()檢索但不刪除此佇列的頭,如果此隊列為空,則返回null

epoll()檢索並刪除此佇列的頭,如果此隊列為空,則返回null

booleanremove(object o)從該佇列中刪除指定元素的單個例項(如果存在)。

intsize()返回此集合中的元素數。

objecttoarray()返回乙個包含此佇列中所有元素的陣列。

ttoarray(t a)返回乙個包含此佇列中所有元素的陣列; 返回的陣列的執行時型別是指定陣列的執行時型別。

public class main , 2));	}	

}class solution else

} //因為返回順序沒有要求,可以維護乙個最小堆

priorityqueuepq = new priorityqueue(

new comparator()

});for (integer key : hs.keyset()) else if (hs.get(key) > hs.get(pq.peek()))

}listlist = new linkedlist();

while (!pq.isempty())

return list;

}}s

以1,1,1,2,2,3為例。

有三個鍵值對<1,3>,<2,1>, < 3,1>,最終優先佇列從隊首到隊尾的元素為:2,1

按照value大小排序,2的value較小,所以排在前面(維護的是最小堆)。

347 前K個高頻元素

給定乙個非空的整數陣列,返回其 現頻率前 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...

347 前 K 個高頻元素

維護乙個size是k的堆。求前k大的數,用小根堆 求前k小的數,用大根堆 求前k大,當堆的sizek時,去掉堆頂,最終堆中的資料就是最後的答案。如陣列arr 求最大的前3個數 一般來說求前k大 小,陣列中數是很大的,直接用排序,在選擇前k大 小的話,效率不高 首先建立堆,其size 0,一直push...

347 前 K 個高頻元素

給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 示例 2 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log n n 是陣列的大小。首先使用雜湊表統計陣列元素的頻率,統計完成後,建立乙個二維陣列,將頻率作為陣...