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);
}
};
本文探讨了如何根据儿童评分公平分配最少数量的糖果。确保每个孩子至少获得一颗糖果,并且评分较高的孩子比邻居获得更多糖果。通过双向遍历算法实现,首先从前向后确保递增序列,再从后向前检查下降序列。
1749

被折叠的 条评论
为什么被折叠?



