【LeetCode】347. 前K個高頻元素
阿新 • • 發佈:2018-12-17
題目描述
給定一個非空的整數陣列,返回其中出現頻率前 k 高的元素。
說明:
- 你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 陣列中不相同的元素的個數。
- 你的演算法的時間複雜度必須優於 O(n log n) , n 是陣列的大小。
示例
輸入: nums = [1,1,1,2,2,3], k = 2 輸出: [1,2]
輸入: nums = [1], k = 1 輸出: [1]
解決方法
使用map統計每個數字出現的頻率,然後將map元素存入vector中,再對vector排序
class Solution {
public:
static bool cmp(pair< int,int> a,pair<int,int> b){ //降序排序
return a.second>b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
//使用map統計每個數字出現的頻率,然後將map元素存入vector中,再對vector排序
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);
vector<int> res;
for (int i=0;i<k;i++)
res.push_back(vec[i].first);
return res;
}
};