分发糖果
题目
135. 分发糖果 - 力扣(LeetCode)
某个位置得考虑左右两边的糖果数量,这个位置如果评分比隔壁两个都高的话,那么分配的糖果就要比隔壁两个数量都多。
分析
我们可以创建一个依赖于左边ratings的数组left和依赖与右边ratings的数组right,分别初始化第一个和最后一个数组的值为1,然后进行遍历,其中一个根据与左边的值进行操作,另一个根据右边的值进行操作,最后找出同时满足两者值的情况。
代码
class Solution {public int candy(int[] ratings) {int n=ratings.length;//初始化对着左边填表和右边填表的数组int[] left=new int[n];int[] right=new int[n];left[0]=1;right[n-1]=1;for(int i=1;i<n;i++){if(ratings[i]>ratings[i-1]){//比左边的数字大,糖果比左边多一个left[i]=left[i-1]+1;}else{left[i]=1;}}for(int i=n-2;i>=0;i--){if(ratings[i]>ratings[i+1]){right[i]=right[i+1]+1;}else{right[i]=1;}}int sum=0;for(int i=0;i<n;i++){sum+=Math.max(left[i],right[i]);}return sum;}
}