Given a non-empty array of integers, return the k most frequent elements.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2]
Example 2:
Input: nums = [1], k = 1 Output: [1]
Note:
- You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
- Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
比较直接的思路:
1 对每个出现的数计数;
2 按照个数大小排序。
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int, int> m;
for (int num : nums) m[num]++;
vector<pair<int, int>> vv(m.begin(), m.end());
sort(vv.begin(), vv.end(), [](pair<int, int> a, pair<int, int> b)->bool {return a.second > b.second; });
vector<int> ans;
for (int i = 0; i < k; i++) ans.push_back(vv[i].first);
return ans;
}
};