K次取反後最大化陣列和
阿新 • • 發佈:2021-06-11
題目連結: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; } };