There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
通过分析,我们可以发现:无外乎就是3种情况:举例来说
(1) rating[0]>rating[1] 如果 candy[0]<=candy[1] candy[0]=candy[1]+1;
(1) rating[0]=rating[1] 不用管,继续走
(1) rating[0]<rating[1] 如果 candy[0]>=candy[1] candy[1]=candy[0]+1;
正的走一遍,我们只考虑i和i+1的关系,也就是child和他右边孩子的糖果数量
反过来扫一遍, 我们只考虑 i 和i-1的关系,child和他左边孩子的糖果数量
这样每一个child的左右就都满足了。一次通过
public int candy(int[] ratings) {
int n=ratings.length;
int[] c= new int[n];
Arrays.fill(c,1);
for(int i=0;i<n-1;i++){
if(ratings[i]>ratings[i+1] && c[i]<=c[i+1]){
c[i]=c[i+1]+1;
} else if(ratings[i]<ratings[i+1] && c[i]>=c[i+1]){
c[i+1]=c[i]+1;
}
}
for(int i=n-1;i>=1;i--){
if(ratings[i]>ratings[i-1] && c[i]<c[i-1]){
c[i]=c[i-1]+1;
} else if(ratings[i]<ratings[i-1] && c[i-1]<=c[i]){
c[i-1]=c[i]+1;
}
}
int sum=0;
for(int candy: c){
sum+=candy;
}
return sum;
}