欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 最大连续子序列和(动态规划 -- 经典Kadane算法)

最大连续子序列和(动态规划 -- 经典Kadane算法)

2025/3/29 19:40:57 来源:https://blog.csdn.net/2302_77889694/article/details/146511600  浏览:    关键词:最大连续子序列和(动态规划 -- 经典Kadane算法)

如果采用暴力枚举,面对大规模数据会暴雷


!推荐使用经典Kadane算法:

        大致思想:

1、用nums[0]初始化 current_max 和 global_max

2、用max(nums[i] , nums[i] + current_max])进行判断是否要更换连续序列的开头(理解关键)



举个例子:       

        # 最开始我们从 nums[0] 开始寻找,假设 nums[1] > nums[0] + 1:

        # 那么我们从 nums[1] 开始重新寻找最长连续子序列,而不是之前的从 nums[0]开始寻找满足条件的连续序列;后续套用逻辑

# 经典方法:Kadane 算法(动态规划思想)# 连续子序列指的是数组中连续的一段
# 重点是理清两个max的关系def max_subarray_sum(nums):global_max = current_max = nums[0]for i in range(1, len(nums)):current_max = max(nums[i], current_max + nums[i]) global_max = max(global_max, current_max) # 时刻更新global_max, 也可以使用if判断替代return global_maxnums = [-2,1,-3,4,-1,2,1,-5,4]
print(max_subarray_sum(nums))  '''
关键理解:current_max = max(nums[i], current_max + nums[i]) # 最开始我们从nums[0]开始寻找,假设nums[1] > nums[0] + 1:# 那么我们从nums[1]开始重新寻找最长连续子序列;后面套用逻辑'''


 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词