题意描述:
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
- 每个孩子至少分配到
1
个糖果。 - 相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
本题难点需要从两侧对容器进行遍历,分别对比左右孩子的大小。
完整C++代码如下:
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int> candyVal(ratings.size(), 1);
for(int i = 1; i < ratings.size(); i++){
if(ratings[i] > ratings[i - 1]){
candyVal[i] = candyVal[i - 1] + 1;
}
}
for(int i = ratings.size() - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1]){
candyVal[i] = max(candyVal[i], candyVal[i + 1] + 1);
}
}
int res = 0;
for(int i = 0; i < candyVal.size(); i++){
res += candyVal[i];
}
return res;
}
};