135.分发糖果
class Solution:
def candy(self, ratings: List[int]) -> int:
n = len(ratings)
candynum = [1]*n#每个孩子最少一个糖果
for i in range(1,n):#正序遍历一次
if ratings[i]>ratings[i-1]:#这个孩子比前一个分数高
candynum[i]=candynum[i-1]+1#至少比前一个孩子多一颗糖
for i in range(2,n+1):#倒序遍历一次
if ratings[n-i]>ratings[n-i+1] and candynum[n-i]<=candynum[n-i+1]:
candynum[n-i]=candynum[n-i+1]+1
return sum(candynum)
class Solution {
public:
int candy(vector<int>& ratings) {
int n = ratings.size();
vector<int> candynum(n,1);
for(int i=1;i<n;++i)
if(ratings[i]>ratings[i-1])
candynum[i]=candynum[i-1]+1;
for(int i=n-2;i>-1;--i)
if(ratings[i]>ratings[i+1]&&candynum[i]<=candynum[i+1])
candynum[i]=candynum[i+1]+1;
int sum=0;
for(auto i:candynum)sum+=i;
return sum;
}
};
这是个困难题,但是个人觉得思路很清晰,并不算难