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?
想到的最极端的例子就是递增数列和递减数列。递增数列可以从前往后扫依次加一,递减数列是从后往前扫依次减一。因此,结合起来就是先从后往前扫,再从前往后扫,扫两遍就能得出最小和了。
public int candy(int[] ratings) {
int[] candies = new int[ratings.length];
for(int i = ratings.length - 1;i > 0;i--){
if(ratings[i] < ratings[i - 1])
if(candies[i - 1] < candies[i] + 1){
candies[i - 1] = candies[i] + 1;
}
}
for(int i = 0;i < ratings.length - 1;i++){
if(ratings[i] < ratings[i + 1])
if(candies[i + 1] < candies[i] + 1){
candies[i + 1] = candies[i] + 1;
}
}
int sum = candies.length;
for(int i = 0;i < candies.length;i++){
sum += candies[i];
}
return sum;
}
28 / 28 test cases passed.
Status: Accepted
Runtime: 432 ms