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 {
public int candy(int[] ratings) {
if(ratings == null || ratings.length == 0) return 0;
int[] dp = new int[ratings.length];
dp[0] = 1;
for(int i = 1; i < dp.length; i++){
dp[i] = ratings[i] > ratings[i - 1]? dp[i - 1] + 1: 1;
}
int result = dp[dp.length - 1];
for(int i = dp.length - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1] && dp[i] <= dp[i + 1]){
dp[i] = dp[i + 1] + 1;
}
result += dp[i];
}
return result;
}
}