每日打卡

2021-12-03 1005. K 次取反后最大化的数组和

2021-12-03  本文已影响0人  16孙一凡通工

硬核模拟出来,其实不太喜欢这种思路,可是也没啥思路做,所以就模拟做了一下。
有点类似于昨天的排序思路
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;

    }
}
上一篇 下一篇

猜你喜欢

热点阅读