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:
1.Each child must have at least one candy.
2.Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
分析:直接根据题意来做,数组candy代表每个孩子的糖果数。
1,首先遍历一遍,每个孩子先一个糖果;
2,从左到右遍历,先让右边满足条件, 即相邻两个孩子,如果右边的rating比左边高,则右边比昨天多一个糖果;
3,从右往左遍历,再让昨天满足条件,即相邻两个孩子,如果左边的rating比右边高,则左边比右边多一个糖果;
4,最后遍历一遍,将每个孩子的糖果数相加即可得到结果。
public class Solution {
public int candy(int[] ratings) {
int n = ratings.length;
int[] candy = new int[n];
for(int i=0; i<n; i++){
candy[i] = 1;
}
for(int i=1; i<n; i++){
if(ratings[i] > ratings[i-1]){
candy[i] = candy[i-1]+1;
}
}
for(int i=n-2; i>=0; i--){
if(ratings[i]>ratings[i+1] && candy[i]<=candy[i+1]){
candy[i] = candy[i+1]+1;
}
}
int num=0;
for(int i=0; i<n; i++){
num = num+candy[i];
}
return num;
}
}