Isaac Emmanuel
09 Sept 2026•EasyGo / Python / TypeScript

Maximize Sum of Array After K Negations

Maximize an array sum after negating exactly k elements, with repeated choices allowed.

Sort ascending, negate negative values first, then use any odd leftover operation on the smallest absolute value.

Complexity

O(n log n) time and language-dependent sorting space.

Solution files

Go•maximize-sum-of-array-after-k-negations/solution.go
package main

import "sort"

func largestSumAfterKNegations(nums []int, k int) int {
	sort.Ints(nums)
	for index := 0; index < len(nums) && k > 0 && nums[index] < 0; index++ {
		nums[index] = -nums[index]
		k--
	}
	sum, minimum := 0, nums[0]
	for _, value := range nums {
		sum += value
		if value < minimum {
			minimum = value
		}
	}
	if k%2 == 1 {
		sum -= 2 * minimum
	}
	return sum
}
Python•maximize-sum-of-array-after-k-negations/solution.py
class Solution:
    def largestSumAfterKNegations(self, nums: list[int], k: int) -> int:
        nums.sort()
        for index in range(len(nums)):
            if k == 0 or nums[index] >= 0: break
            nums[index] = -nums[index]; k -= 1
        return sum(nums) - (2 * min(nums) if k % 2 else 0)
TypeScript•maximize-sum-of-array-after-k-negations/solution.ts
function largestSumAfterKNegations(nums: number[], k: number): number {
  nums.sort((left, right) => left - right);
  for (let index = 0; index < nums.length && k > 0 && nums[index] < 0; index += 1, k -= 1) nums[index] = -nums[index];
  let sum = nums.reduce((total, value) => total + value, 0);
  if (k % 2 === 1) sum -= 2 * Math.min(...nums);
  return sum;
}