题目链接
https://leetcode.com/problems/candy/
题目描述
有n个孩子站成一条直线,老师根据每个孩子的表现预先给他们打分并分发糖果。分发糖果的规则为:
(1)每个孩子至少分到1个糖果。
(2)评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。
请问老师至少需要准备多少颗糖果?
示例
输入:ratings =[1,0,2]
输出:5
分别给三个孩子分发2、1、2颗糖果。
输入:ratings = [1,2,2]
输出:4
分别给三个孩子分发1、2、1颗糖果。第三个孩子得到1颗糖果也是符合题意的。
解题思路
这个问题涉及到数组中当前值和左右两边值的大小比较 ,比较结果会影响当前孩子得到的糖果数量。这种涉及到两处比较的情况,我们一般要先比较一侧,再比较另一侧,在两个方向上进行遍历。开数组candy,candy[i]表示索引为i的小孩得到的糖果。
首先我们先从左往右遍历,保证在右侧且分数更高的孩子能够比左侧的孩子得到更多的糖果。此时就用到“贪心思想“,局部最优策略为:”只要右边孩子的评分比左边孩子大,右边的孩子就多一个糖果“&