题干:
代码:
class Solution {
public:static bool cmp(int a, int b){return abs(a) > abs(b);}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 res = 0;for(int i : nums) res += i;return res;}
};
贪心思路:将所有负数取反,如果k还剩下一点,判断奇偶,奇就让最小的正数取反,偶对正负没有影响。为了确定最小正数的位置要先按照绝对值大小对数组进行排序(static bool),确定末尾就是绝对值最小的正数,k为奇结果一定是负数,取反一次即可(while(k--)损伤时间性能)。