Dulces
Hay n niños haciendo una fila. Cada niño tiene una calificación según el arreglo de enteros ratings.
Le das dulces a estos niños según los siguientes requisitos:
- Cada niño debe tener al menos un dulce.
- Los niños con una calificación más alta obtienen más dulces que sus vecinos.
Devuelve el número mínimo de dulces que necesitas tener para distribuir los dulces a los niños.
Ejemplos
Ejemplo 1:
Input: ratings = [1,0,2]
Output: 5
Explicación: Puedes asignar al primer, segundo y tercer niño
con 2, 1, 2 dulces respectivamente.
Ejemplo 2:
Input: ratings = [1,2,2]
Output: 4
Explicación: Puedes asignar al primer, segundo y tercer niño
con 1, 2, 1 dulces respectivamente.
El tercer niño obtiene 1 dulce porque satisface
las dos condiciones anteriores.
Soluciones
class Solution:
def candy(self, ratings: List[int]) -> int:
n = len(ratings)
candies = [1] * n
# Paso 1: Asignar curva creciente con dulces crecientes
for i in range(1, n):
if ratings[i] > ratings[i-1]:
candies[i] = 1 + candies[i-1]
# Paso 2: Asignar curva decreciente con dulces crecientes
total = candies[-1]
for i in range(n-1, 0, -1):
if ratings[i-1] > ratings[i]:
candies[i-1] = max(candies[i-1], 1 + candies[i])
total += candies[i-1]
return total