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?
class Solution {
public:
int candy(vector<int> &ratings) {
const int n = ratings.size();
vector<int> candy(n,0);
for (int i = 1, inc = 1; i < n; i++) {
if (ratings[i] > ratings[i-1]) {
candy[i] = max(inc++, candy[i]);
} else {
inc = 1;
}
}
for (int j = n - 2, inc = 1; j >= 0; j--) {
if (ratings[j] > ratings[j+1]) {
candy[j] = max(inc++, candy[j]);
} else {
inc = 1;
}
}
return accumulate(&candy[0], &candy[0]+n, n);
}
};