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 class Solution {
/**This algorithm need O(n) time.<br>
*@author Averill Zheng
*@version 2014-06-21
*@since JDK 1.7
*/
public int candy(int[] ratings) {
int length = ratings.length, temp = 1, max = 0;
boolean decrease = true;
int total = 0;
if(length > 0){
total = 1;
for(int i = 1 ; i < length; ++i){
if(ratings[i] > ratings[i - 1]){
if(decrease){
temp = 1;
decrease = false;
}
total +=(++temp);
max = temp;
}
else if(ratings[i] < ratings[i - 1]){
if(!decrease){
temp = 0;
decrease = true;
}
total +=(++temp);
if(max > 0 && temp >= max){
total += (++temp - max);
max = 0;
}
}
else{
decrease = true;
total += 1;
max = 0;
temp = 1;
}
}
}
return total;
}
}