思路:
设学生 A 和学生 B 左右相邻,A 在 B 左边:
- 从左往右遍历rating数组,当ratingA < ratingB 时 leftB=leftA+1。
- 从右往左遍历rating数组,当ratingA > ratingB 时 leftA=leftB+1。
- 将两次结果取最大值,因为这样才能同时满足以上规则。
public int candy(int[] ratings) {
int len=ratings.length;
int[] left=new int[len];
int[] right=new int[len];
Arrays.fill(left,1);
Arrays.fill(right,1);
for(int i=1;i<len;i++){
if(ratings[i-1]<ratings[i]){
left[i]=left[i-1]+1;
}
}
int res=left[len-1];
for(int i=len-2;i>=0;i--){
if(ratings[i]>ratings[i+1]){
right[i]=right[i+1]+1;
}
res+=Math.max(left[i],right[i]);
}
return res;
}