rocksc30 / LeetCode

用于力扣刷题打卡
2 stars 0 forks source link

1005. K 次取反后最大化的数组和 #105

Open rocksc30 opened 1 year ago

rocksc30 commented 1 year ago
class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int i = 0;
        int ans = 0;
        while (i < nums.length - 1 && nums[i] < 0 && k > 0){
            if (nums[i + 1] > 0){
                if (-nums[i] < nums[i + 1]){
                    ans += (k % 2 == 0 ? nums[i] : -nums[i]);
                    k = 0;
                    i++;
                }else {
                    ans += -nums[i];
                    k--;
                    i++;
                }
                break;
            }
            nums[i] = -nums[i];
            ans += nums[i];
            k--;
            i++;
        }
        if (k > 0){
            ans += (k % 2 == 0 ? nums[i] : -nums[i]);
            i++;
        }
        while (i < nums.length){
            ans += nums[i++];
        }
        return ans;
    }
}