題目:給定乙個非空的整數陣列,返回其**現頻率前 k 高的元素。
eg:
輸入: nums = [1,1,1,2,2,3], k = 2
輸出: [1,2]
eg:
輸入: nums = [1], k = 1
輸出: [1]
你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 陣列中不相同的元素的個數。
你的演算法的時間複雜度必須優於 o(n log n) , n 是陣列的大小。
題目資料保證答案唯一,換句話說,陣列中前 k 個高頻元素的集合是唯一的。
你可以按任意順序返回答案。
**思路:首先用unordered_map()進行對映,記錄每次出現的值,
然後用優先佇列,進行k項插值。
然後輸出 。如此的簡介明了。
注意裡面的unordered_map的使用,他可以直接用key作為索引,非常的方便,查詢非常的快速。
同時priority_queue的使用也要注意一下,可以看
最後稍微注意一下他們插值用的是emplace(),和emplace_back()來代替push和push_back();
他們是可以直接接受元素的,直接在容器裡面進行構造。減少了拷貝。
class solution
//有限佇列,大堆頂,用pair作為引數
//先比較第一元素,第乙個元素相等比較第二個元素
priority_queue, vector>, greater>> pqueue;
//遍歷整個map 方法1
//unordered_map::iterator it = map.begin();
//for ( ; it !=map.end(); it++)
////}
//遍歷整個map 方法2
for (auto& i : map)
}while (!pqueue.empty())
return result;
}};
前 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...
前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...
前k個高頻元素
使用unorderedmap借用雜湊來統計數字出現的頻率,然後題目要求複雜度是nlogn,所以借用multimap來自動排序 此時因為需要排序所以使用頻率來作為key。最後使用倒迭代器,來將結果壓倒vector中附註 1.multimap iterator it1 st.rbegin 這種寫法會出錯...