ok
看题:
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
你需要按照以下要求,帮助老师给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?
就是说这个老师很抠,还有点偏心,欺负小孩子不懂事,喜欢那些表现好的孩子,但是又不想多给糖,所以小朋友有排在一起,然后根据评分给糖,如果这个小朋友的左边的评分比他低,那这个小朋友就要比左边的多一个,如果评分一样,你运气差,你就只有一颗。
class Solution {
public:
int candy(vector<int>& ratings) {
int n=ratings.size();//获得小朋友个数
vector<int>l(n);//用于存放按照左边进行给糖的数量
vector<int>r(n);//用于存放按照右边进行给糖的数量
int ans=0;//总糖数
for(int i=0;i<n;i++){
if(i>0&&ratings[i]>ratings[i-1]){//如果左边的评分比现在这个小朋友的评分低,那就比左边的多一个糖,如果一样或者少,不好意思,你就只有一个糖
l[i]=l[i-1]+1;
}
else{
l[i]=1;
}
}
for(int i=n-1;i>=0;i--){
if(i<n-1&&ratings[i]>ratings[i+1]){//如果右边的评分比现在这个小朋友的评分低,那就比右边的多一个糖,如果一样或者少,不好意思,你就只有一个糖
r[i]=r[i+1]+1;
}
else{
r[i]=1;
}
}
for(int i=0;i<n;i++){
ans+=max(l[i],r[i]);//遍历两个情况,每次取取最大的糖数,既然是需要最少的糖数,但也要满足给糖的每个要求。
}
return ans;
}
};
ok