Java教程

K次取反后最大化数组和

本文主要是介绍K次取反后最大化数组和,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目链接:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/
题目描述:

题解:
1.按绝对值从大到小排序
2.遍历整个数组,遇到负数,将负数变正数
3.如果遍历完整个数组,K仍然大于0,将数组的最后一个值取反。K为偶数,则为原数值,k为奇数,则为原数的相反数。

 class Solution {
 public:
     static bool compare(int a, int b)
     {
         return abs(a) > abs(b);
     }
     
     int largestSumAfterKNegations(vector<int>& nums, int k) {
         int result = 0;
         sort(nums.begin(), nums.end(), compare);
         for(int i = 0; i < nums.size() - 1; i++)
         {
             if(k > 0 && nums[i] < 0)
             {
                nums[i] = abs(nums[i]);
                 k--;
             }
         }
         if(k % 2 == 1)
             nums[nums.size() - 1] *= -1;
         for(int a : nums)
             result += a;
        return result;


     }
 };
这篇关于K次取反后最大化数组和的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!