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:
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[] left = new int[ratings.length];
int[] right = new int[ratings.length];
left[0] = 1;
for (int i = 1; i < ratings.length; i++) {
if (ratings[i] > ratings[i-1]) {
left[i] = left[i-1]+1;
} else {
left[i] = 1;
}
}
right[ratings.length-1] = left[ratings.length-1];
for (int i = ratings.length-2; i >= 0; i--) {
if (ratings[i] > ratings[i+1]) {
right[i] = right[i+1]+1;
} else {
right[i] = 1;
}
}
int res = 0;
for (int i = 0; i < ratings.length; i++) {
res += Math.max(left[i], right[i]);
}
return res;
}
}
?
原文:http://hcx2013.iteye.com/blog/2246263