题目:

链接:https://leetcode-cn.com/problems/candy

  1. 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
  2. 你需要按照以下要求,帮助老师给这些孩子分发糖果:
  3. 每个孩子至少分配到 1 个糖果。
  4. 相邻的孩子中,评分高的孩子必须获得更多的糖果。
  5. 那么这样下来,老师至少需要准备多少颗糖果呢?
  6. 示例 1:
  7. 输入: [1,0,2]
  8. 输出: 5
  9. 解释: 你可以分别给这三个孩子分发 212 颗糖果。

答案:

时间:

30分钟未果,菜。

  1. class Solution:
  2. def candy(self, ratings: List[int]) -> int:
  3. n=len(ratings)
  4. left=[1]*n
  5. right=[1]*n
  6. ans=0
  7. for i in range(n-1):
  8. if ratings[i+1]>ratings[i]:
  9. left[i+1] =left[i]+1
  10. for i in range(n-1,0,-1):
  11. if ratings[i-1]>ratings[i]:
  12. right[i-1]=right[i]+1
  13. for i in range(n):
  14. ans+= max(left[i],right[i])
  15. return ans

要点:

1. 一般和相邻有关的都是贪心

曾经周赛两度相邻贪心(不过这是一年前了)
模拟赛

2. 想到了两边贪心没有付诸行动也不知道为啥。

其他:

代码报错:无