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 為出現次數最多的兩個單詞,均為...