[M贪心] lc1887. 使数组元素相等的减少操作次数(贪心+思维+周赛244_2)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[M贪心] lc1887. 使数组元素相等的减少操作次数(贪心+思维+周赛244_2)相关的知识,希望对你有一定的参考价值。
1. 题目来源
2. 题目解析
贪心题。
根据题意,每次找到最大值,将其变为次大值,最终所有数都将变为最小值。
那么每个数变得次数就是比它严格小的数的个数,针对重复数字只考虑一次。
排序后拿变量维护有多少有多少数严格大于当前数即可。
时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n 2 ) O(n^2) O(n2)
class Solution {
public:
int reductionOperations(vector<int>& nums) {
sort(nums.begin(), nums.end());
int res = 0;
for (int i = 1, s = 0; i < nums.size(); i ++ ) {
if (nums[i] != nums[i - 1]) s ++ ;
res += s;
}
return res;
}
};
貌似大佬蛮喜欢这样写的,利用 map
和 greater<int>
参数来处理:
class Solution {
public:
int reductionOperations(vector<int>& nums) {
map<int, int, greater<int>> mp;
for (int x : nums) mp[x] += 1;
int ans = 0, s = 0;
for (auto [k, v] : mp) {
ans += s;
s += v;
}
return ans;
}
};
以上是关于[M贪心] lc1887. 使数组元素相等的减少操作次数(贪心+思维+周赛244_2)的主要内容,如果未能解决你的问题,请参考以下文章
[M贪心] lc1838. 最高频元素的频数(前缀和+二分+双指针+滑动窗口+周赛238_2)
[M贪心] lc1888. 使二进制字符串字符交替的最少反转次数(贪心+前后缀分解+周赛244_3)