1.问题

        1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

  • 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。

重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

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

2.思路

        首先按照绝对值大小对数组进行排序,然后遍历数组将值为负数的元素进行翻转,最后检查K是否为0。如果K为偶数,可以直接返回数组之和,如果K为奇数,将最后一个元素翻转后累加返回即可。

3.代码实现


    static bool cmp(int a,int b){
        return abs(a)>abs(b);
    }
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        
        sort(nums.begin(),nums.end(),cmp);

        for(int i=0;i<nums.size();i++){

            if(nums[i]<0&&k>0){
                nums[i]*=-1;
                k--;
            }
        }

        if(k%2==1) nums[nums.size()-1]*=-1;

        int result=0;
        for(int num:nums){
            result+=num;
        }

        return result;
    }

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐