这道题思路不太好想,需要两步:
1、从左往右,从1位置开始遍历数组,若当前位置分数比左边的分数大,那么糖果数等于左边的+1
for(int i = 1;i<n;i++){
if(ratings[i] > ratings[i-1]){
candy[i] = candy[i-1] + 1;
}
}
2、从右往左,从n-2位置开始,如果当前位置分数比右边的大,那么取当前位置糖果数和右边糖果数+1二者的最大值
for(int i = n-2;i>=0;i--){
if(ratings[i] > ratings[i+1]){
candy[i] = Math.max(candy[i],candy[i+1]+1);
}
}
public int candy(int[] ratings) {
int n = ratings.length;
int[] candy = new int[n];
Arrays.fill(candy,1);
for(int i = 1;i<n;i++){
if(ratings[i] > ratings[i-1]){
candy[i] = candy[i-1] + 1;
}
}
for(int i = n-2;i>=0;i--){
if(ratings[i] > ratings[i+1]){
candy[i] = Math.max(candy[i],candy[i+1]+1);
}
}
int res = 0;
for(int x:candy){
res += x;
}
return res;
}