题目
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
示例:
思路
解题步骤
第一步:将数组排列
第二步:从前向后遍历,遇到负数将其变为正数,k–
第三步:若K>0,反复转变数值最小的元素,直到k=0
第四步:求和
代码
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
int index = 0;
Arrays.sort(nums);
//遇到负数将其变为整数
while(k > 0 && index < nums.length-1 && nums[index] <0 ){
nums[index] = -nums[index];
k--;
index++;
}
if(k == 0){
return Arrays.stream(nums).sum();
}
//若K>0,反复转变数值最小的元素,直到k=0
Arrays.sort(nums);
if(k % 2 == 1) nums[0] = -nums[0];
return Arrays.stream(nums).sum();
}
}