每日一题day8
问题描述
求解思路
开始像两边同时顾,但是好像不行
官方给的求解思路:
开始每人一颗糖,先考虑每个孩子的左边,就如果分数比左边的高,那他至少比前一个人多一颗糖果。但是还要考虑右边的情况。
上述同样方法,每个人一颗糖,完后从右往左看,如果比右边的分数高,就至少比他多一颗糖。
然后综合两种规则所得每个孩子的糖的数量,取最大值。
即他一定满足分数高于两边的孩子时,糖一定更多。
C++实现
class Solution {
public:
int candy(vector<int>& ratings){
int l = ratings.size();
vector<int> ans(l,1);
for(int i = 1;i < l;i++){
if(ratings[i]>ratings[i-1]){
ans[i]=ans[i-1]+1;
}
}
int cnt = 0;
int right = 1;
for(int i = l-1;i >= 0;i--){
if(i < l-1&&ratings[i]>ratings[i+1])
right++;
else right = 1;
cnt+=max(right,ans[i]);
}
return cnt;
}
};