There are n children standing in a line. Each child is assigned a rating value given in the integer array ratings. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy. Children with a higher rating get more candies than their neighbors. Return the minimum number of candies you need to have to distribute the candies to the children.
Example 1:**bold text**
Input: ratings = [1,0,2]
Output: 5
Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies respectively.
Example 2:
Input: ratings = [1,2,2]
Output: 4
Explanation: You can allocate to the first, second and third child with 1, 2, 1 candies respectively.
The third child gets 1 candy because it satisfies the above two conditions.
Constraints:
n == ratings.length
1 <= n <= 2 * 104
0 <= ratings[i] <= 2 * 104
from typing import List
class Solution:
def candy(self, ratings: List[int]) -> int:
n = len(ratings)
candies = [1] * n
# Iterate from left to right
for i in range(1, n):
if ratings[i] > ratings[i - 1]:
candies[i] = candies[i - 1] + 1
total_candies = candies[n - 1]
# Iterate from right to left and update candies
for i in range(n - 2, -1, -1):
if ratings[i] > ratings[i + 1]:
candies[i] = max(candies[i], candies[i + 1] + 1)
total_candies += candies[i]
return total_candies
# Example usage
if __name__ == "__main__":
solution = Solution()
ratings1 = [1, 0, 2]
ratings2 = [1, 2, 2]
print(solution.candy(ratings1)) # Expected output: 5
print(solution.candy(ratings2)) # Expected output: 4
5 4
I would like to thank Dhirajpatra for writing this piece of code. Feel free to reach him out if you have any questions about Python Programming.