給定一個非空的整數數組,返回其中出現頻率前 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 是數組的大小。
思路很簡單:用map存,key存nums[i],value存頻率,然後轉入vector中,vector的元素成爲了pair對象,自寫一個cmp方法,按value的值從大到小排序,然後取出前k個的key。
static bool cmp(pair<int, int> a, pair<int, int> b) {
return a.second > b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> res;
unordered_map<int, int> m;
for (int i = 0; i < nums.size(); i++) {
m[nums[i]]++;
}
vector<pair<int, int>> vec(m.begin(), m.end());
sort(vec.begin(), vec.end(), cmp);
for (auto t : vec) {
if (k == 0) break;
res.push_back(t.first);
k--;
}
return res;
}