135. 分发糖果
思路
这道题比我想的复杂。首先从前往后比,如果右边比左边大,右边的值为左边的值的基础加1,然后,从后往前比,如果左边的值比右边的值大,那么左边的值取右边的值加一和第一轮避过后的左边的值中最大的那个,这样能保证这个值保证了这个糖果的数量既大于左边的也大于右边的。
代码实现
class Solution(object):
def candy(self, ratings):
candy = [1]*len(ratings)
for i in range(len(ratings) - 1):
if ratings[i+1]>ratings[i]:
candy[i+1] = candy[i] + 1
for i in range(len(ratings) - 1, 0,-1):
if ratings[i-1] > ratings[i]:
candy[i-1] = max(candy[i] + 1, candy[i-1])
return sum(candy)