135. 分发糖果
image.png

思路

这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,如果两边一起考虑一定会顾此失彼。【是的,我就是左右混乱了】
简单来说,因为相邻两个孩子得分高的一定会获得更多糖果,这里分左右两边来看,也就是说 左规则【从左向右遍历】和右规则【从右向左遍历】都要成立,所以最后是取两个规则结果的最大值。

  1. var candy = function(ratings) {
  2. let candy =new Array(ratings.length).fill(1);//先每人分一个
  3. for(let i =1;i<ratings.length;i++){
  4. if(ratings[i]>ratings[i-1]){
  5. //大于左边,则比左边多一个【左规则】
  6. candy[i] =candy[i-1]+1;
  7. }
  8. }
  9. for(let i=ratings.length-2;i>=0;i--){
  10. if(ratings[i]>ratings[i+1]){
  11. candy[i] =Math.max(candy[i],candy[i+1]+1);//比较当前自身的值和右边+1谁更大。【更大才能满足左右两个规则】
  12. }
  13. }
  14. return candy.reduce((a,b)=>{
  15. return a+b;
  16. })
  17. };

image.png