135 - Candy
Written on October 27, 2015
Tweet
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 n = ratings.length;
int[] num = new int[n];
Arrays.fill(num, 1);
for (int i = 1; i < n; i++) {
if (ratings[i] > ratings[i-1]) {
num[i] = num[i-1] + 1;
}
}
int result = num[n - 1];
for (int i = n - 2; i >= 0; i--) {
if (ratings[i] > ratings[i+1]) {
num[i] = Math.max(num[i], num[i+1] + 1);
}
result += num[i];
}
return result;
}
}
class Solution(object):
def candy(self, ratings):
"""
:type ratings: List[int]
:rtype: int
"""
if not ratings:
return 0
candies = [1] * len(ratings)
for i in xrange(1, len(ratings)):
if ratings[i] > ratings[i - 1]:
candies[i] = candies[i - 1] + 1
for i in reversed(xrange(len(ratings) - 1)):
if ratings[i] > ratings[i + 1]:
candies[i] = max(candies[i + 1] + 1, candies[i])
return sum(candies)