135. 分发糖果
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
思路
- 可以直接使用贪心,从前往后遍历一次,保证只要当前孩子分数比前一孩子高,糖果数就比前一孩子多一颗。
- 从后往前遍历一次,保证当前孩子分数比后一孩子高,糖果数也需要比后一孩子多一颗。
代码
class Solution {
public:
int candy(vector<int>& ratings) {
int n = ratings.size();
if(n == 0) {
return 0;
}
vector<int> count(n, 1);
for(int i = 1; i < n; i++) {
if(ratings[i] > ratings[i - 1]) {
count[i] = count[i - 1] + 1;
}
}
for(int i = n - 2; i >= 0; i--) {
if(ratings[i] > ratings[i + 1] && count[i] <= count[i + 1]) {
count[i] = count[i + 1] + 1;
}
}
int ans = 0;
for(int i = 0; i < n; i++) {
ans += count[i];
}
return ans;
}
};