题意描述:
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。

利用贪心算法,将负数变为正数,若均为正数后k依旧不为0,那么就要判断k是否剩余为奇数。因为偶数次经过连续取反可以抵消。
完整C++代码如下:
class Solution {
static bool cmp(int a, int b){
return abs(a) > abs(b);
}
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(), nums.end(), cmp);
for(int i = 0; i < nums.size(); i++){
if(nums[i] < 0 && k > 0){
nums[i] *= -1;
k--;
}
}
if(k % 2 ==1){
nums[nums.size() - 1] *= -1;
}
int result = 0;
for(int num : nums){
result += num;
}
return result;
}
};
文章描述了一种算法问题,给定一个整数数组nums和一个整数k,通过k次操作将数组中的元素取反以求得最大和。首先,按元素绝对值排序,优先将负数变为正数,然后如果k为奇数,再取最后一个元素取反。最后返回数组和。
1029

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



