1005. K 次取反后最大化的数组和
思路:桶排序
桶排序适用于数据范围较小,但是数个数较多的场景。这个时候我们直接统计每个数出现的次数,进而计算总和。
如果最后kkk个数大于负数的个数,判断奇偶性,减去两倍的绝对值最小的数即可
时间复杂度:O(n)O(n)O(n)
空间复杂度:C(200)C(200)C(200)
class Solution {
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
unordered_map<int, int> cnt;
int t = 1e8;
for (auto& num : nums) {
cnt[num] ++ ;
t = min(t, abs(num));
}
for (int i = -100; i < 0 && k > 0; i ++ ) {
while (cnt[i] > 0 && k > 0) {
cnt[i] -- ;
cnt[-i] ++ ;
k -- ;
}
}
int res = 0;
for (int i = -100; i <= 100; i ++ )
res += cnt[i] * i;
if (k % 2 != 0) res -= 2 * t;
return res;
}
};
该博客介绍了如何运用桶排序算法解决一个编程问题:在给定数组中,进行K次元素取反操作后,如何最大化数组的和。通过统计每个数的出现次数并考虑奇偶性,可以有效地计算出最大和。时间复杂度为O(n),空间复杂度为O(200)。博客内容详细解释了算法实现过程和关键步骤。
313

被折叠的 条评论
为什么被折叠?



