分发糖果
Question
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到
1
个糖果。 - 相邻两个孩子评分更高的孩子会获得更多的糖果。
- 请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

思路
那么本题我采用了两次贪心的策略:
- 一次是从左到右遍历,只比较右边孩子评分比左边大的情况。
- 一次是从右到左遍历,只比较左边孩子评分比右边大的情况。
这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。

js
var candy = function(ratings) {
let n = ratings.length
let candy = [] //记录每个人的糖果数
for(let i=0;i<n;i++){candy[i]=1}
for(let i=1; i<n; i++){ //左到右遍历
if(ratings[i]>ratings[i-1] && candy[i]<=candy[i-1])
candy[i] = candy[i-1]+1
}
for(let i=n-2; i>=0; i--){ //右到左遍历
if(ratings[i]>ratings[i+1] && candy[i]<=candy[i+1])
candy[i] = candy[i+1]+1
}
return candy.reduce((pre,cur)=>pre+cur,0)
};