力扣每日打卡:135. 分发糖果(js)

题目:

 

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

 

你需要按照以下要求,帮助老师给这些孩子分发糖果:

 

每个孩子至少分配到 1 个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?

示例 1:

输入: [1,0,2]
输出: 5
解释: 你可以分别给这三个孩子分发 212 颗糖果。

示例 2:

输入: [1,2,2]
输出: 4
解释: 你可以分别给这三个孩子分发 121 颗糖果。
     第三个孩子只得到 1 颗糖果,这已满足上述两个条件。

难度:困难

题解:

var candy = function(ratings) {
  //创建一个长度与所给数组一致,内部元素全为1的新数组,
      var SweetNub = new Array(ratings.length).fill(1);
      //循环数组(左循环)
      for (let i = 0; i < ratings.length; i++) {
        // 如果当前元素大于其左边的元素,那么在SweetNub数组中该元素的数值+1
        if (ratings[i] > ratings[i - 1]) {
          SweetNub[i] = SweetNub[i - 1] + 1;
          // console.log(SweetNub, ratings[i]);
        }
      }
      //循环数组(右循环)
      for (let i = ratings.length - 1; i > -1; i--) {
        //如果当前元素大于其右边的元素,那么在SweetNub数组中该元素的数值+1
        if (ratings[i] < ratings[i - 1]) {
          //与左循环后的数组中的元素进行大小对比,取最大值
          SweetNub[i - 1] = Math.max(SweetNub[i] + 1, SweetNub[i - 1]);
        }
      }
      //求和
      return SweetNub.reduce((a, b) => {
        return a + b;
      });
};

 

 

 

 

 

posted @ 2020-12-24 16:40  草莓糖&薄荷茶  阅读(164)  评论(0)    收藏  举报