LeetCode算法刷题(python) Day34|08贪心算法|455.分发饼干、376. 摆动序列、53. 最大子序和

LeetCode 455. 分发饼干

力扣题目链接

先将小孩胃口和饼干大小排序,因为默认从小到大排序,为了代码方便,我们选择小饼干满足小胃口的策略。先拿最小的饼干给胃口最小的小孩,如果满足就继续后面的饼干和小孩,如果不满足这块饼干就不行了,换大一点的饼干。

class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        g.sort()
        s.sort()
        result = 0
        i, j = 0, 0
        while i < len(g) and j < len(s):
            if g[i] <= s[j]:
                result += 1
                i += 1
                j += 1
            else:
                j += 1
        return result

LeetCode 376. 摆动序列

力扣题目链接
本题把图画出来会好理解一些

让峰值尽可能的保持峰值,然后删除单一坡度上的节点

在计算是否有峰值的时候,大家知道遍历的下标 i ,计算 prediff(nums[i] - nums[i-1])curdiff(nums[i+1] - nums[i]),如果prediff < 0 && curdiff > 0 或者 prediff > 0 && curdiff < 0 此时就有波动就需要统计。

这是我们思考本题的一个大题思路,但本题要考虑三种情况:

  • 情况一:上下坡中有平坡
  • 情况二:数组首尾两端
  • 情况三:单调坡中有平坡


class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return 1        
        prediff = 0
        result = 1

        for i in range(len(nums)-1):
            curdiff = nums[i+1] - nums[i]
            if (prediff >= 0 and curdiff < 0) or (prediff <= 0 and curdiff > 0):
                result += 1
                # 当出现摆动时,才更新prediff,可以绕过单调平坡的情况
                prediff = curdiff
        return result

LeetCode 53. 最大子序和

力扣题目链接
如果当前子数组的和小于0,说明它会拉低后面子数组的和,那么应该抛弃它,从下一个数开始求和

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        cur_sum = 0
        result = -float('inf')
        
        i = 0
        while i < len(nums):
            cur_sum += nums[i]
            if cur_sum < 0:
                result = max(result, cur_sum)
                cur_sum = 0
            else:
                result = max(result, cur_sum)
            i += 1
        return result

今日毕!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值