Approach
The idea is to store each element's occurrence in a hash and then count the occurrence of each frequency in a hash again. Then we will sort the frequency of occurrences of each element in increasing order and will start removing the element whose frequency is less or equal to m.
Algorithm
- Create a hashmap to store the occurrence of elements.
- Count the occurrence of all elements and store them in the hash.
- Sort the hash in increasing order.
- Remove the elements whose frequency is less than m from the hashmap.
- Print the number of elements present in the hash.
Implementation in C++
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
#define pb push_back
int hash_fun(int arr[], int n, int m)
{
int temp = 0;
// hashmap for storing the occurence
unordered_map<int, int> mp;
vector<pair<int, int>> v;
for (int i = 0; i < n; i++)
mp[arr[i]]++;
// use vector to store the pair key with its occurrence
for (auto i = mp.begin(); i != mp.end(); i++)
v.pb(make_pair(i->second, i->first));
sort(v.begin(), v.end()); // sorting the vector
int vec_size = v.size();
for (int i = 0; i < vec_size; i++)
{
// Remove the value if it is less than or equal to m
// else return the remaining size
if (v[i].first <= m)
{
m = m - v[i].first;
temp++;
}
else
return vec_size - temp;
}
return vec_size - temp;
}
int main()
{
int m;
int arr[] = {3, 1, 2, 2, 3, 3};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Enter the value of m : ";
cin >> m;
cout << endl;
cout << hash_fun(arr, size, m);
return 0;
}
You can also try this code with Online C++ Compiler
Run Code
Input
Enter the value of m : 3
Output
1
Time Complexity
The time complexity of the above approach is O(NlogN) because we have used sorting, which marks the upper bound for time complexity.
Space Complexity
The space complexity of the approach is O(N), as we are storing the elements as a key in the hashmap.
You can also read about the Longest Consecutive Sequence.
Frequently Asked Questions
What is HashMap data structure?
A HashMap is a data structure that can map certain keys to a specific value. The values and keys could be anything.
Is sort in C++ STL?
A C++ Standard Template Library(STL) includes a built-in function called sort(). The elements in the range can be sorted using this function in either ascending or descending order.
What is the time complexity of sort function in C++ STL?
The worst-case time complexity of sort() is in O(n log n), where n is the number of sorted elements.
Also Read - Strong number in c
Conclusion
In this article, we have extensively discussed the problem of printing the minimum number of distinct elements after removing m items. We solved the problem using the hashmap data structure and discussed its time as well as space complexity.
We hope that this blog has helped you enhance your knowledge about the count of minimum distinct elements and if you like to learn more, check out our articles Implementation of HashMap, Sorting Based Problems, STL in C++, and many more on our Website.
Recommended Problems -
Refer to our Guided Path on Coding Ninjas Studio to upskill yourself in Data Structures and Algorithms, Competitive Programming, JavaScript, System Design, and many more! If you want to test your competency in coding, you may check out the mock test series and participate in the contests hosted on Coding Ninjas Studio! But if you have just started your learning process and are looking for questions asked by tech giants like Amazon, Microsoft, Uber, etc; you must look at the problems, interview experiences, and interview bundle for placement preparations.
Do upvote our blogs if you find them helpful and engaging!
Happy Learning!