老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每一个孩子的表现,预先给他们评分。
你须要按照如下要求,帮助老师给这些孩子分发糖果:
每一个孩子至少分配到 1 个糖果。
相邻的孩子中,评分高的孩子必须得到更多的糖果。
那么这样下来,老师至少须要准备多少颗糖果呢?数组
来源:力扣(LeetCode)
连接:https://leetcode-cn.com/problems/candycode
输入: [1,0,2]
输出: 5
解释: 你能够分别给这三个孩子分发 二、一、2 颗糖果。leetcode
输入: [1,2,2]
输出: 4
解释: 你能够分别给这三个孩子分发 一、二、1 颗糖果。
第三个孩子只获得 1 颗糖果,这已知足上述两个条件get
两个数组left和right分别记录从左向右规则和从右向左规则时,每一个孩子应该分的糖果数。
题目要求即为同时知足两个方向的规则,即两个数组按位取max。
最终结果要加上每一个孩子至少一个糖果。(或者left,right数组初始化为1)io
class Solution { public int candy(int[] ratings) { int len = ratings.length; int sum = len; int[] left = new int[len]; int[] right = new int[len]; for (int i = 1; i < len; i++) { if(ratings[i] > ratings[i-1]) { left[i] = left[i-1]+1; } } for (int i = len-2; i>=0; i--) { if(ratings[i] > ratings[i+1]) { right[i] = right[i+1]+1; } } for (int i = 0; i < len; i++) { sum += Math.max(left[i], right[i]); } return sum; } }