思路
这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,如果两边一起考虑一定会顾此失彼。【是的,我就是左右混乱了】
简单来说,因为相邻两个孩子得分高的一定会获得更多糖果,这里分左右两边来看,也就是说 左规则【从左向右遍历】和右规则【从右向左遍历】都要成立,所以最后是取两个规则结果的最大值。
var candy = function(ratings) {
let candy =new Array(ratings.length).fill(1);//先每人分一个
for(let i =1;i<ratings.length;i++){
if(ratings[i]>ratings[i-1]){
//大于左边,则比左边多一个【左规则】
candy[i] =candy[i-1]+1;
}
}
for(let i=ratings.length-2;i>=0;i--){
if(ratings[i]>ratings[i+1]){
candy[i] =Math.max(candy[i],candy[i+1]+1);//比较当前自身的值和右边+1谁更大。【更大才能满足左右两个规则】
}
}
return candy.reduce((a,b)=>{
return a+b;
})
};