একটি পূর্ণসংখ্যা অ্যারে এবং একটি সংখ্যা K দেওয়া থাকলে, অ্যারেতে সবচেয়ে বেশি বার আসা 탑 K টি এলিমেন্ট বের করতে হবে।
ইনপুট-১
N = 6, K = 2, arr[] = {1,1,1,2,2,3}
আউটপুট
1 2
ইনপুট-২
N = 2, K = 1, arr[] = {1,2}
আউটপুট
1
সমাধানের পদ্ধতি
- হ্যাশম্যাপ (
unordered_map) দিয়ে প্রতিটি এলিমেন্টের ফ্রিকোয়েন্সি গণনা করুন। - ম্যাপের এন্ট্রিগুলো ভেক্টরে কপি করুন এবং ফ্রিকোয়েন্সি অনুযায়ী ডেসেন্ডিং সর্ট করুন।
- প্রথম K টি এলিমেন্ট আউটপুট করুন।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
bool compare(pair<int,int> &a, pair<int,int> &b) {
return a.second > b.second;
}
void topKFrequent(int *arr, int n, int k) {
unordered_map<int,int> mp;
for (int i = 0; i < n; i++) mp[arr[i]]++;
vector<pair<int,int>> v(mp.begin(), mp.end());
sort(v.begin(), v.end(), compare);
for (int i = 0; i < k; i++)
cout << v[i].first << " ";
}
int main() {
int N = 5, arr[N] = {1,1,3,2,2}, k = 2;
topKFrequent(arr, N, k);
return 0;
}
আউটপুট
2 1