题目描述:
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到
1
个糖果。 - 相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
题解:
class Solution:
def candy(self, ratings: List[int]) -> int:
n = len(ratings)
candies = [1] * n
for i in range(1, n):
if ratings[i] > ratings[i-1]:
candies[i] = candies[i-1] + 1
for i in range(n-2, -1, -1):
if ratings[i] > ratings[i+1] and candies[i] <= candies[i+1]:
candies[i] = candies[i+1] + 1
return sum(candies)
思路:
这道题通过贪心算法来解决。
1.给每个孩子分配一个糖果。
2.从左到右遍历一次评分列表,确保如果一个孩子的评分比前一个孩子高,那么他的糖果数量也应该比前一个孩子多一个。
3.再从右到左遍历一次评分列表,确保如果一个孩子的评分比后一个孩子高,且他当前的糖果数量不满足条件,那么他的糖果数量应该比后一个孩子多一个。