LeetCode(python3) #53 最大子序和

一.解题思路

说明:我傻眼了好吧,一开始用暴力解法,结果超时了…由于算法底子不行就去看大佬们的题解,结果就是动态规划?分治法?贪心算法?

思路:我参考了一个动态规划题解(能读懂,就是缺基础理论),结果真香,真的是优雅高效。

留坑:这里就留个坑,看书,看视频去。后续将动态规划、分治法、贪心这些算法原理都写一篇博客出来。然后题目都二刷,不懂算法做什么算法题,只会暴力破解(大力出奇迹…)

注意:最大序列号和res的初始值不能为0,因为nums可能为[-1]

二.代码展示

class Solution:
    def maxSubArray(self, nums):
        # 当前最大连续子序列和
        sub_res = 0
        # 记录最大序列和
        res = nums[0]
        for i in range(len(nums)):
            # 如果当前最大连续子序列和大于零说明对后续有正向结果(更大)于是加上nums[i]
            if sub_res > 0:
                sub_res += nums[i]
            # 如果前最大连续子序列和小于等于零,说明反向结果(更小或无),于是更新sub_res
            else:
                sub_res = nums[i]
            # 更新最大子序和,始终保持最大
            res = max(sub_res, res)
        return res

三.总结其他

总结:这边如果实在看不懂的同学们可要看一下别人的题解(更详细),我这段时间会再次更新题解,附上相关算法的原理。

交流:如果有什么建议或者疑问可以在文章下面回复哈,期待交流。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值