分发糖果之解答

首先,我们从左到右遍历,只看右边的邻居,那么能保证右边的孩子大于左边的孩子的时候,右边的孩子一定会得到更多,得到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
		
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值