leetcode 1005. Maximize Sum Of Array After K Negations

题解

比较反转的次数K和多少个负数nums,主要分两种情况,K < nums时,就反转K个最小的负数,k >= nums时,则看看K-nums是奇数还是偶数,偶数就反转两次不变,奇数就再减去最小值(数组A变为正整数中的最小值)

示例代码(go)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func largestSumAfterKNegations(A []int, K int) int {
res, nums, min := 0, 0, 101
sort.Ints(A)
for _, v := range A {
if v < 0 {
nums++
}
if min > abs(v) {
min = abs(v)
}
res += abs(v)
}
if K < nums {
for i := K; i < nums; i++ {
res += 2*A[i]
}

} else if (K-nums) % 2 == 1 {
res -= 2*min
}
return res
}

func abs(a int) int {
if a < 0 {
return -a
}
return a
}