举一个例子,1,2,3,4,3,4,1 ,小朋友得到的糖分别是1,2,3,4,1,2,1
有特殊情况比如1,2,3,2,2,2小朋友得到的糖是1,2,3,1,1,1;
所以有三种情况一种是递增,一种是递减,一种是相等
public class Solution {
private int count;
public int candy(int[] ratings) {
int maxc = 1;
count+=ratings.length;//先给所有小朋友一个糖
int topIndex = 0;
int addN = 1;// 要加的数,每次递增都要加他,他自己也要递增
int flag = 0;//0表示递增,1表示递减
for (int i=1;i<ratings.length;i++){
int first = i-1;
int second = i;
if (ratings[first]<ratings[second]){
count+=addN;//比如1,2,3,前期发糖1,1,1,然后到第一个加一就是,1,2,1, 下一次加2,就是1,2,3
addN++;
topIndex=i;
if(flag==0){
maxc++;
}
else{
maxc=2;
}
flag = 0;
}else if(ratings[first]==ratings[second]){
maxc = 1;
addN = 1;
topIndex = i;
}
else { //这个有点难理解,只要递减了,递减的数直接为1,而如果他左边的从上个登峰到它之间的数也都需要加一,比如3,2,1// 得到 1 , 1 ,1;
//然后2,1,1;然后3,2,1,当如果过长,顶峰也需要加一
flag = 1;
if (i-topIndex>=maxc){
count+=i-topIndex;
}else {
count+=i-topIndex-1;
}
addN=1;
}
}
return count;
}
}