6、C++算法之代码随想录(贪心算法)——K次取反后最大化的数组和
·
1.问题
1005. K 次取反后最大化的数组和 - 力扣(LeetCode)
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
- 选择某个下标
i并将nums[i]替换为-nums[i]。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
2.思路
首先按照绝对值大小对数组进行排序,然后遍历数组将值为负数的元素进行翻转,最后检查K是否为0。如果K为偶数,可以直接返回数组之和,如果K为奇数,将最后一个元素翻转后累加返回即可。
3.代码实现
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;
}
更多推荐


所有评论(0)