class Solution {
public int candy(int[] ratings) {
if(ratings==null){
return 0;
}
if(ratings.length==1){
return 1;
}
int count =0;
int[] dp = new int[ratings.length];
dp[0] = (ratings[0]<=ratings[1])?1:2;
for(int i=1;i<ratings.length;i+=1){
if(ratings[i]>ratings[i-1]){
dp[i] = dp[i-1]+1;
}
else if(ratings[i]==ratings[i-1]){
dp[i] = 1;
}
else{
if(dp[i-1]-1==0){
dp[i-1]+=1;
dp[i]=1;
int index = i-1;
while(true){
if(index-1>=0 && ratings[index]<ratings[index-1]){
if(dp[index-1]<=dp[index]){
dp[index-1]+=1;
index-=1;
}
else{
break;
}
}
else{
break;
}
}
}
else{
dp[i] = 1;
}
}
}
for(int i=0;i<dp.length;i+=1){
count += dp[i];
// System.out.println(dp[i]);
}
return count;
}
}
这道题的核心思路就是:还是定义一个动态规划数组。遍历ratings从前至后,在满足要求的情况下更新dp。当dp[i-1]==1且ratings[i]<ratings[i-1],这个时候就需要修改动态规划数组.从i-1节点依次迭代到前,直到ratings[i]>=ratings[i-1],过程中dp数组中的值都需要加1