135. 分发糖果
题目描述
解题思路
贪心策略:两遍遍历,每次遍历,只考虑并更新相邻一侧的大小关系
代码实现
class Solution:
def candy(self, ratings: List[int]) -> int:
size = len(ratings)
can = [1] * size
# 从左往右遍历,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1
for lidx in range(1, size):
if ratings[lidx] > ratings[lidx - 1]:
can[lidx] = can[lidx - 1] + 1
# 从右往左遍历,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,
# 则左边孩子的糖果数更新为 max(右边孩子的糖果数, 右边孩子的糖果数加 1)
for ridx in range(size - 2, -1, -1):
if ratings[ridx] > ratings[ridx + 1]:
can[ridx] = max(can[ridx], can[ridx + 1] + 1)
return sum(can)