Leetcode347 前K個高頻元素

2021-10-02 08:51:42 字數 1277 閱讀 8833

給定乙個非空的整數陣列,返回其**現頻率前 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 n) , n 是陣列的大小。

思路

1.遍歷一遍使用hashmap來儲存頻數。遍歷hashmap一遍,建立小根堆,維持乙個大小為k的小根堆,然後彈出小根堆的元素到陣列中

時間複雜度是o(nlogk),空間複雜度是o(n),儲存雜湊表的開銷

class

solution})

;for

(int i =

0; i < nums.length;i++

)for

(int num: hm.

keyset()

)}list

list =

newarraylist

<

>()

;while

(k >0)

return list;

}}

2,桶排序,桶的標號是元素出現的頻次

如果元素出現n次,放在n號桶中

步驟1,使用hashmap統計元素出現的頻次

步驟2,分別將元素按照出現的頻次放入桶中

步驟3,從後往前遍歷桶,找到前k個高頻元素

時間複雜度是o(n),空間複雜度是o(n)

class

solution

list

bucket =

newarraylist

[nums.length+1]

; list

res =

newarraylist

<

>()

;for

(int num : hm.

keyset()

) bucket[fre]

.add

(num);}

for(

int i = nums.length; i >

0;i--

)for

(int num: list)}}

return res;

}}

Leetcode 347 前K個高頻元素

給定乙個非空的整數陣列,返回其 現頻率前k高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 首先都要先用hash表統計一次頻率,乙個思路是排序,取前k個元素 第二個思路是使用優先佇列,這裡提供兩種 class so...

Leetcode347 前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...

leetcode 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 ...