数组连续子序列的最大的和-四种算法,四种时间复杂度

本文探讨了一种经典的算法问题——找出数组中连续子序列的最大和,并详细介绍了四种不同的解法,包括暴力求解、分治策略和动态规划。针对全负数的情况,最大子序列和被定义为0。算法复杂度从O(n^3)逐步优化到O(n),动态规划是其中最有效的方法。
摘要由CSDN通过智能技术生成

给定一组数据:31, -41, 59, 26, -53, 58, 97, -93, -23, 84。要求找到这组数据中连和最大的子序列,相信很多人都看过这个算法,能够直接给出线性时间复杂度的解法。但是还是有其他解法的,而且是循序渐进的,从O(n^3), O(n^2), O(n*logn)到O(n)。

在开始算法之前要进行一下约定,如果当前输入的都是负数的时候,综合最大的子序列是空的,总和为0.

第一种方法就是brute-force解法,就是对满足所有的0<=i < j < n的组合(i,j)进行迭代,对于每个整数对都要计算a[i,j]的总和,这个算法有个特点,也就是造成时间复杂度很高的缺点,对于每次计算的结果没有记录,只是简单的将此次计算的结果和上次计算的结果进行比较,求得当前最大值后,就给扔掉了。下面给出算法:

current_max = 0;
sum = 0;
for(i = 0; i < n; i++) {
	for(j = i; j < n; j++) {
		sum = 0;
		for(k = i; k <= j; k++)
			sum += a[k];
		if(sum > current_max)
			current_max =
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值