day-23 分发糖果
参考了答案。。。。。。
思路:所有位置的糖果数应该满足左规则和右规则 左规则:如果ratings[i]>ratings[i-1],则应该比左边多一颗糖果 右规则:如果ratings[i]>ratings[i+1],则应该比右边多一颗糖果 最终糖果数为ans[i]=Math.max(left[i],right[i])
code:
class Solution {
public int candy(int[] ratings) {
int n=ratings.length;
int left[]=new int[n];
int right[]=new int[n];
int ans[]=new int[n];
Arrays.fill(left,1);
for(int i=1;i<n;i++){//满足左规则
if(ratings[i]>ratings[i-1]){
left[i]=left[i-1]+1;
}
}
for(int i=0;i<n;i++){
right[i]=left[i];
}
for(int i=n-2;i>=0;i--){//满足右规则
if(ratings[i]>ratings[i+1]){
right[i]=right[i+1]+1;
}
}
for(int i=0;i<n;i++){
ans[i]=Math.max(left[i],right[i]);
}
int total=0;
for(int i=0;i<n;i++){
total+=ans[i];
}
return total;
}
}