题目描述
给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。
示例 1:
输入:arr = [5,5,4], k = 1
输出:1
解释:移除 1 个 4 ,数组中只剩下 5 一种整数。
示例 2:
输入:arr = [4,3,1,1,3,3,2], k = 3
输出:2
解释:先移除 4、2 ,然后再移除两个 1 中的任意 1 个或者三个 3 中的任意 1 个,最后剩下 1 和 3 两种整数。
打卡
思路
参考了冰可乐泡枸杞的代码,自己没做出来~
-
定义一个哈希表mp,key为arr数组素数的值,value为值出现的次数,遍历一遍数组arr来,{key, value}保存到mp中。
-
定义一个数组cnt,用来保存arr数组中各个元素出现的次数。并且给cnt排序,这样cnt数组中就是arr里的元素出现的次数从小到大排序。
-
遍历cnt数组,每次k -= c(每循环一次,cnt数组的大小自减一);当发现当前的次数大于k的时候,可以退出循环。最后返回cnt数组的大小,就是答案。
代码
class Solution {
public:
int findLeastNumOfUniqueInts(vector<int>& arr, int k) {
unordered_map<int, int> mp;
for (int& a : arr) ++mp[a];
vector<int> cnt;
for (auto& p : mp) cnt.emplace_back(p.second);
sort(cnt.begin(), cnt.end());
int ans = cnt.size();
for (auto& c : cnt) {
if (c > k) break;
k -= c;
--ans;
}
return ans;
}
};
参考
- https://leetcode-cn.com/problems/least-number-of-unique-integers-after-k-removals/
- https://leetcode-cn.com/problems/least-number-of-unique-integers-after-k-removals/solution/c-zhong-gui-zhong-ju-de-480msjie-fa-ha-xi-by-gary_/