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?
思路: 先从前往后, 如果rating比前面的那个大, 就在前面那个基础上加1, 否则为1.
再从后往前,如果rating 比后面那个大, 但是candy 没有比后面那个大, 就要在后面那个基础上加1.
易错点: 记住后面往前时候, if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1])才能 candys[i] = candys[i + 1] + 1;
public class Solution {
public int candy(int[] ratings) {
int n = ratings.length;
int[] candys = new int[n];
int ret = 0;
candys[0] = 1;
for(int i = 1; i < n; i++){
if(ratings[i] > ratings[i - 1]){
candys[i] = candys[i - 1] + 1;
}else{
candys[i] = 1;
}
}
ret = candys[n - 1];
for(int i = n - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1]){
candys[i] = candys[i + 1] + 1;
}
ret += candys[i];
}
return ret;
}
}