将数组按照绝对值的方法排序,从后往前,把绝对值大的负数变正即可。
java中自定义排序int[]比较麻烦,故我用的直接排序,用两个指针比较绝对值遍历。
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int n=nums.length;
int i=0,j=n-1;
int sum=0;
while(i<j){
int a1=Math.abs(nums[i]),a2=Math.abs(nums[j]);
if(a1<a2){
sum+=nums[j--];
}else{
if(k>0&&nums[i]<0){
sum-=nums[i++];
k--;
}else{
sum+=nums[i++];
}
}
}
if(k%2==0) sum+=nums[i];
else sum-=nums[i];
return sum;
}
}