个人思路:原本想用滑动窗口,维持长度为3的窗口挨个判断,但代码没写出来,似乎这个思路不对,因此改用左右两次遍历,左遍历的时候维护一个数组,把0处元素置1,其余根据大小判断加还是也为1,然后再右遍历,可以再维护一个数组记录右遍历情况,最后挑左右数组里面大的数相加(也可以算出右的时候直接判断,会快很多)
C
int candy(int* ratings, int ratingsSize){
int sum[ratingsSize];
for(int i=0;i<ratingsSize;i++){
if(i>0 && ratings[i]>ratings[i-1]){
sum[i] = sum[i-1]+1;
}else{
sum[i] = 1;
}
}
int res = 0;
int right = 0;
for(int i=ratingsSize-1;i>=0;i--){
if(i<ratingsSize-1 && ratings[i]>ratings[i+1]){
right++;
}else{
right = 1;
}
res += fmax(sum[i], right);
}
return res;
}