LeetCode 135:candy 题解 Python

题意:每个小朋友有一个rating值, 为每个小朋友分配糖果,如果某个小朋友的rating比相邻的某个人高,则他的糖果也要比他多。问最少需要给出去多少糖果


题解:这是一个贪心,先正着扫一边,如果序列递增,则糖果数依次加一,如果遇到变小的则设为1。 得到最少的糖果序列 。

           然后再反向贪心一遍。 最后把两个序列求max  然后相加即可


>.< 很久没做过算法一直在做水题。 就当学python了吧。  

class Solution:
    # @param {integer[]} ratings
    # @return {integer}
    def candy(self, ratings):
        num = [1] 
        cnt = 1 
        for i in range(1,len(ratings)) :
            if ratings[i]>ratings[i-1] :
                cnt += 1
            else :
                cnt = 1 
            num.append(cnt)
       # ans = num.pop()
        ans = num[len(ratings)-1]
        cnt = 1 
        for i in range(len(ratings)-1,0,-1) :
            if ratings[i-1]>ratings[i] :
                cnt += 1
            else :
                cnt = 1 
            ans += max ( num[i-1], cnt )
        return ans 

if __name__ == '__main__' :
    a = Solution ()
    ratings = [1,2,3,4,3,2,1]
    ans2 = a.candy(ratings)
    print ans2
~                                                                                                           
~               

虽然实习没什么时间做题。但是还是要每天坚持才行!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值