其他分享
首页 > 其他分享> > leetcode 1005. K 次取反后最大化的数组和

leetcode 1005. K 次取反后最大化的数组和

作者:互联网

image

将数组按照绝对值的方法排序,从后往前,把绝对值大的负数变正即可。

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;
    }
}

标签:nums,int,取反,绝对值,数组,1005,排序,leetcode
来源: https://www.cnblogs.com/livingsu/p/15915630.html