Top k frequent elements
This is the O(nlogn) solution of the problem#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 ; }
Leave a Comment