zoukankan      html  css  js  c++  java
  • LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)

    给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)

    以这种方式修改数组后,返回数组可能的最大和。


    示例 1:
    输入:A = [4,2,3], K = 1
    输出:5
    解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。

    例 2:
    输入:A = [3,-1,0,2], K = 3
    输出:6
    解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。

    示例 3:
    输入:A = [2,-3,-1,5,-4], K = 2
    输出:13
    解释:选择索引 (1, 4) ,然后 A 变为 [2,3,-1,5,4]。

    思路:解决这个题就是将最小的数进行k次取反,具体步骤看代码

    public static int largestSumAfterKNegations(int[] arr,int k) {
            int sum = 0;
            int count = 0;
            //1.进行排序
            Arrays.sort(arr);
            //2.如果第一个元素大于0,那么就将第一个元素取k次反
            if(arr[0]>0) {
                while(k>0) {
                    arr[0] = -arr[0];
                    k--;
                }
            }else {
                
                for(int i = 0;i<arr.length;i++) {
                    //3.第一个数小于0,直接取反count加1
                    if(arr[i] < 0 && count < k) {
                        arr[i] = -arr[i];
                        count++;
                    }else if(arr[i] == 0 &&count<k){
                        //4.第i个数为0,并且count小于k,那么我们对0进行取反操作,即直接break
                        break;
                    }else if(arr[i] > 0 && count <k){
                        //5.如果第i个数大于0,并且count小于k,那么我们将第i个数和第i-1的数做比较
                        //将小的数进行k-count次取反
                        if(arr[i] > arr[i-1])
                            arr[i - 1] = arr[i-1]*(int)Math.pow(-1,k - count);
                        else arr[i] = arr[i]*(int)Math.pow(-1,k - count);
                        break;
                    }
                }
            }
            //6.求和
            for(int i : arr)
                sum += i;
            return sum;
        }
  • 相关阅读:
    第四讲动手动脑集课后作业
    第三讲课后作业
    课后作业01
    《大道至简》第一章伪代码读后感
    第八周学习进度条
    第七周学习进度条
    求一维联通数组的最大子数组之和
    求二维数组的最大联通子数组之和
    第六周学习进度条
    求一个数组的最大子数组之和
  • 原文地址:https://www.cnblogs.com/du001011/p/10506449.html
Copyright © 2011-2022 走看看