题目的描述很简单,但是模拟的过程显得比较麻烦。
现在就是分两次扫描。其实扫描的本质上是一样的。从后面比前面的评分高,那么直接糖果+1.
class Solution {
public:
int candy(vector<int>& ratings) {
//其实就是发糖果
//描述一下就是:
//如果后面的人,评分更高,那么糖果+1
//如果后面的人,评分更低,那么糖果不变
//就是一个模拟的过程
int n=ratings.size();
vector<int> dis(n,1);//先给每一个每一个人都去进行赋值
//如果后面的人相对于前面的人评分更低
for(int i=0;i<n-1;i++){
if(ratings[i+1]>ratings[i]) dis[i+1]=dis[i]+1;
}
//然后从后后面去,遍历,看看后面的评分<=前面的评分
for(int i=n-1;i>0;i--){
if(ratings[i-1]>ratings[i]&&dis[i-1]<=dis[i]){
dis[i-1]=dis[i]+1;
}
}
//然后把糖果的总和去进行累加
int res=0;
for(auto c:dis) res+=c;
return res;
}
};