692 前K個高頻單詞

2022-09-09 14:30:26 字數 1953 閱讀 8558

2021-05-20 leetcode每日一題

標籤:堆、字典序、雜湊表

題目

給一非空的單詞列表,返回前 k 個出現次數最多的單詞。

返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。

輸入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2

輸出: ["i", "love"]

解析: "i" 和 "love" 為出現次數最多的兩個單詞,均為2次。

注意,按字母順序 "i" 在 "love" 之前。

輸入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4

輸出: ["the", "is", "sunny", "day"]

解析: "the", "is", "sunny" 和 "day" 是出現次數最多的四個單詞,

出現次數依次為 4, 3, 2 和 1 次。

假定 k 總為有效值, 1 ≤ k ≤ 集合元素數。

輸入的單詞均由小寫字母組成。

嘗試以 o(n log k) 時間複雜度和 o(n) 空間複雜度解決。

分析

題目很好理解,關鍵題目說o(n log k) 時間複雜度和 o(n) 空間複雜度,這個臣妾恐怕辦不到啊。按照我的思路,拿個treemap存它,關鍵是treemap是按照鍵排序的啊,那讓它按值排序不就行了嗎?聽起來好像是個不錯的想法,實現起來也不難,那就幹它。

class solution 

// 按值降序

這個如果用lambda寫的話,一行就o了。

但這個結果不咋地。不過看起來這個13ms和27ms擊敗率已經沒啥區別了,都屬於墊底的。

這裡也可以使用優先順序佇列來儲存,在建構函式裡傳入排序函式即可。和上面的寫法意思大致一樣。

class solution 

// 優先權佇列,指定排序規則

priorityqueuequeue = new priorityqueue<>((o1, o2) ->

// 這裡map.get(o1)和map.get(o2)比較要使用equals,因為在[-128, 127]之間,==才返回true

692 前K個高頻單詞

給一非空的單詞列表,返回前 k 個出現次數最多的單詞。返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。示例 1 輸入 i love leetcode i love coding k 2輸出 i love 解析 i 和 love 為出現次數最多的兩個單詞,均為2...

LeetCode 692 前K個高頻單詞

題目 給一非空的單詞列表,返回前 k 個出現次數最多的單詞。返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。示例 1 輸入 i love leetcode i love coding k 2 輸出 i love 解析 i 和 love 為出現次數最多的兩個單詞...

前K個高頻單詞 leetcode 692

給一非空的單詞列表,返回前 k 個出現次數最多的單詞。返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。示例 1 輸入 i love leetcode i love coding k 2 輸出 i love 解析 i 和 love 為出現次數最多的兩個單詞,均為...