硬核模拟出来,其实不太喜欢这种思路,可是也没啥思路做,所以就模拟做了一下。
有点类似于昨天的排序思路
java版本:
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
// 统计负数的个数count 和k
//
int n=nums.length;
int count=0;
int[][] arr=new int[n][2];
for(int i=0;i<n;i++){
if(nums[i]<0){
arr[i][0]=-nums[i];
count++;
arr[i][1]=-(i+1);
}else{
arr[i][0]=nums[i];
arr[i][1]=i+1;
}
}
// 绝对值排序
Arrays.sort(arr,(a,b)->b[0]-a[0]);
int res=0;
if(k<count){
for(int i=0;i<n;i++){
if(arr[i][1]<0){
k--;
}
if(k<0 && arr[i][1]<0){
arr[i][0]=-arr[i][0];
}
res+=arr[i][0];
}
return res;
}
int res_=(k-count)%2;
for(int i=0;i<n;i++){
// System.out.println(arr[i][0]);
res+=arr[i][0];
}
res=(res_==0)?res:res-arr[n-1][0]*2;
return res;
}
}
网友评论