Top k frequent elements
This is the O(nlogn) solution of the problemunknown
c_cpp
a year ago
1.1 kB
5
Indexable
#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<int, int>a, pair<int, int>b) {
return a.second > b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int>mp;
int sizeOfNums = nums.size();
for (int i = 0; i < sizeOfNums; i++) {
mp[nums[i]]++;
}
vector < pair<int, int> > vec (mp.begin(), mp.end());
sort(vec.begin(), vec.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
return a.second > b.second; // Sort by frequency in descending order
});
vector<int>ans;
int storePrevious = -100005;
for (const auto& p : vec) {
if (ans.size() >= k and storePrevious != p.second) {
break;
}
else if (ans.size() >= k and storePrevious == p.second) {
ans.push_back(p.first);
}
ans.push_back(p.first);
storePrevious = p.second;
}
return ans;
// for (auto i : vec) {
// cout << i.first << " " << i.second << endl;
// }
}
int32_t main() {
vector<int>nums = {1, 2};
int k = 2;
vector<int> fans = topKFrequent(nums, k);
for (auto i : fans) {
cout << i << endl;
}
return 0 ;
}Editor is loading...
Leave a Comment