leetcode 贪心算法

 刷题记录

以局部最优推出整体最优,且想不到反例,则可以尝试贪心算法

455. 分发饼干

从后向前遍历孩子数组,用大饼干满足胃口大,并统计满足小孩数量

class Solution(object):
    def findContentChildren(self, g, s):
        g.sort()
        s.sort()
        res=0
        ind=len(s)-1
        for i in range(len(g)-1,-1,-1):
            if ind>=0 and s[ind]>=g[i]:
                res+=1
                ind-=1
        return res

376. 摆动序列

class Solution(object):
    def wiggleMaxLength(self, nums):
        pre,cur=0,0
        res=1
        for i in range(len(nums)-1):
            cur=nums[i+1]-nums[i]
            if (cur>0 and pre<=0) or (cur<0 and pre>=0):
                res+=1
                pre=cur
        return res

53. 最大子数组和

遍历nums,从头开始用count累积,如果count一旦加上nums[i]变为负数,那么就应该从nums[i+1]开始从0累积count了,因为已经变为负数的count,只会拖累总和。

class Solution(object):
    def maxSubArray(self, nums):
        res=float('-inf')
        count=0
        for i in range(len(nums)):
            count+=nums[i]
            if count>res:res=count
            if count<=0:count=0
        return res

122. 买卖股票的最佳时机 II

收集正利润

class Solution(object):
    def maxProfit(self, prices):
        res=0
        for i in range(1,len(prices)):
            res+=max(prices[i]-prices[i-1],0)
        return res

55. 跳跃游戏

i每次移动只能在cover的范围内移动,每移动一个元素,cover得到该元素数值(新的覆盖范围)的补充,让i继续移动下去。

而cover每次只取 max(该元素数值补充后的范围, cover本身范围)。

如果cover大于等于了终点下标,直接return true就可以了。

class Solution(object):
    def canJump(self, nums):
        cover=0
        i=0
        while i<=cover:
            cover=max(i+nums[i],cover)
            if cover>=len(nums)-1:return True
            i+=1
        return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值