Top k frequent elements

This is the O(nlogn) solution of the problem
 avatar
unknown
c_cpp
a month ago
1.1 kB
1
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 ;
}
Leave a Comment