题目:
链接:https://leetcode-cn.com/problems/candy
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
你需要按照以下要求,帮助老师给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?
示例 1:
输入: [1,0,2]
输出: 5
解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。
答案:
时间:
30分钟未果,菜。
class Solution:
def candy(self, ratings: List[int]) -> int:
n=len(ratings)
left=[1]*n
right=[1]*n
ans=0
for i in range(n-1):
if ratings[i+1]>ratings[i]:
left[i+1] =left[i]+1
for i in range(n-1,0,-1):
if ratings[i-1]>ratings[i]:
right[i-1]=right[i]+1
for i in range(n):
ans+= max(left[i],right[i])
return ans
要点:
1. 一般和相邻有关的都是贪心
曾经周赛两度相邻贪心(不过这是一年前了)
模拟赛