一.解题思路
说明:我傻眼了好吧,一开始用暴力解法,结果超时了…由于算法底子不行就去看大佬们的题解,结果就是动态规划?分治法?贪心算法?
思路:我参考了一个动态规划题解(能读懂,就是缺基础理论),结果真香,真的是优雅高效。
留坑:这里就留个坑,看书,看视频去。后续将动态规划、分治法、贪心这些算法原理都写一篇博客出来。然后题目都二刷,不懂算法做什么算法题,只会暴力破解(大力出奇迹…)
注意:最大序列号和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
三.总结其他
总结:这边如果实在看不懂的同学们可要看一下别人的题解(更详细),我这段时间会再次更新题解,附上相关算法的原理。
交流:如果有什么建议或者疑问可以在文章下面回复哈,期待交流。