1. 程式人生 > 其它 >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;


     }
 };