Reclamación:
Hay un montón de piedras y el peso de cada piedra es un número entero positivo.
En cada ronda, elija las dos piedras más pesadas de ellas y luego rómpalas. Suponga que el peso de la piedra es xey, y x <= y. Los posibles resultados de la trituración son los siguientes:
Si x == y, entonces ambas piedras se triturarán por completo;
si x! = Y, entonces la piedra de peso x se triturará por completo, y el nuevo peso de la piedra de peso y es yx.
Al final, como mucho solo quedará una piedra. Devuelve el peso de esta piedra. Si no quedan piedras, devuelve 0.
Ejemplo:
Entrada: [2,7,4,1,8,1]
Salida: 1
Explicación:
Primero seleccione 7 y 8 para obtener 1, por lo que la matriz se convierte en [2,4,1,1,1]
y luego 2 Y 4, obtiene 2, por lo que la matriz se convierte en [2,1,1,1],
luego 2 y 1, obtiene 1, por lo que la matriz se convierte en [1,1,1], y
finalmente 1 y 1 son seleccionado, y se obtiene 0. La matriz final se convierte en [1], que es el peso de la última piedra restante.
Idea:
Primero clasifique
las piedras y compare las dos piedras más grandes.
Si los pesos no son iguales, haga una gran reducción y saque dos piedras. Al mismo tiempo, sume el valor restado a la secuencia nuevamente.
Si el peso es el Igual, levante las dos piedras y
repita el proceso anterior hasta que:
si solo queda una piedra al final, devuelva el peso de la
piedra y devuelva 0 si no hay piedra
Código:
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
stones.sort()
while True:
if len(stones) == 1:
return stones[0]
if len(stones) == 0:
return 0
if stones[-2] == stones[-1]:
stones.pop()
stones.pop()
stones.sort()
elif stones[-1] >= stones[-2]:
a = stones.pop()
b = stones.pop()
stones.append(a - b)
stones.sort()
resultado de ejecución: