Description
Given an array A of integers, we must modify the array in the following way: we choose an i and replace A[i] with -A[i], and we repeat this process K times in total. (We may choose the same index i multiple times.)
Return the largest possible sum of the array after modifying it in this way.
Example 1:
Input: A = [4,2,3], K = 1
Output: 5
Explanation: Choose indices (1,) and A becomes [4,-2,3].
Example 2:
Input: A = [3,-1,0,2], K = 3
Output: 6
Explanation: Choose indices (1, 2, 2) and A becomes [3,1,0,2].
Example 3:
Input: A = [2,-3,-1,5,-4], K = 2
Output: 13
Explanation: Choose indices (1, 4) and A becomes [2,3,-1,5,4].
Note:
- 1 <= A.length <= 10000
- 1 <= K <= 10000
- -100 <= A[i] <= 100
analysis
The meaning of the question is: given array A, replace the number in it into the opposite number, and the same number can be replaced infinite times.
- This problem needs to use the smallest heap, each time the smallest number is taken out, and then turned into the opposite number, so that the sum of the resulting array is the largest.
Code
class Solution:
def largestSumAfterKNegations(self, A: List[int], K: int) -> int:
res=sum(A)
heapq.heapify(A)
while(K>0):
cur=heapq.heappop(A)
heapq.heappush(A,-cur)
K-=1
res=res-cur+(-cur)
return res
references
【LeetCode】1005. Maximize Sum Of Array After K Negations Problem Solving Report (Python)