我们看一下题目。他要求我们对相邻的比较,但是我们会发现,从左至右的时候右面是未知的,如果出现一组这样的我们可能就做不出来
[1, 2, 8, 8, 3, 1]
与右面的相比的话,我们不能只是简简单单的加1了,那该怎么办呐?
试想如果弄两个数组,每个数组分别代表从左至右和从右至左如何?
class Solution:
def candy(self, ratings: List[int]) -> int:
num = [1 for _ in range(len(ratings))]
Num = num[:]
n = len(ratings)
之后呐,就开始分别搞了!
for i in range(1, len(ratings)):
if ratings[i] > ratings[i - 1]:
num[i] = num[i - 1] + 1
#从左至右
for i in range(n - 2, -1, -1):
if ratings[i] > ratings[i + 1]:
Num[i] = max(num[i], Num[i + 1] + 1)
#从右至左
或许有人不懂 for i in range(n - 2, -1, -1):这一串什么意思,他就是从n-2到-1,-1是步长,每次-1.
之后我们就可以求和了
for i in range(n):
count += max(num[i], Num[i])
哪里不懂的可以私信我哦!