首先,我们从左到右遍历,只看右边的邻居,那么能保证右边的孩子大于左边的孩子的时候,右边的孩子一定会得到更多,得到left[]
问题来了,那么万一左边的孩子比右边的高呢?
那么就从右到左,一样来一次得到right[],但是然后呢?
取对应位置的最大值,为什么是最大?
因为满足两个条件才能满足题目的意思,也就是必须都满足!
class Solution:
def candy(self,ratings):
if not ratings:
return 0
n = len(ratings)
left =[1]*n
for i in range(1,n):
if ratings[i]>ratings[i-1]:
left[i] = left[i-1]+1
right=[1]*n
for j in range(n-2,-1,-1):
if ratings[j]>ratings[j+1]:
right[j] = right[j+1]+1
count=0
for k in range(n):
count += max(left[k], right[k])
return count