给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int flag = 1;
int i;
int t = k;
for(i = 0; i < nums.length && k > 0; i++) {
if(nums[i] > 0) {
flag = 0;
break;
// 说明要比较正数与变换后的负数了
}
nums[i] *= -1;
k --;
}
if(i<t) {
if(flag == 0) {
Arrays.sort(nums);
//System.out.println(k);
if(k%2 == 1) nums[0] *= -1;
} else {
if(k%2 == 1) nums[nums.length-1] *= -1;
}
}
int sum = 0;
for(int num:nums) {
sum += num;
}
return sum;
}
}
每次将最小的取反,利用sort降低时间复杂度。