Descripción
Dada una matriz A de enteros, debemos modificar la matriz de la siguiente manera: elegimos una i y reemplazamos A [i] con -A [i], y repetimos este proceso K veces en total. (Podemos elegir el mismo índice i varias veces).
Devuelve la mayor suma posible de la matriz después de modificarla de esta manera.
Ejemplo 1:
Input: A = [4,2,3], K = 1
Output: 5
Explanation: Choose indices (1,) and A becomes [4,-2,3].
Ejemplo 2:
Input: A = [3,-1,0,2], K = 3
Output: 6
Explanation: Choose indices (1, 2, 2) and A becomes [3,1,0,2].
Ejemplo 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].
Nota:
- 1 <= A. longitud <= 10000
- 1 <= K <= 10000
- -100 <= A [i] <= 100
análisis
El significado de la pregunta es: dada la matriz A, reemplace el número en ella por el número opuesto, y el mismo número se puede reemplazar infinitas veces.
- Este problema necesita usar el montón más pequeño, cada vez que se saca el número más pequeño y luego se convierte en el número opuesto, de modo que la suma de la matriz resultante sea la más grande.
Código
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