栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最大子序列问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最大子序列问题

最大子序列问题

问题描述:对于一个无序序列q=,存在一个子序列q0=,使得该子序列的和最大,求该子序列和的值maxNum。

算法实现:

#include 
using namespace std;

//算法1,时间复杂度:o(n`3)
int max_subSeq1 (int a[], int len) {
	
	int i, j, k;
	int maxNum=0;
	int thisNum=0;
	
	for (i=0; imaxNum) {
				maxNum = thisNum;
			}
		}
	}
	
	return maxNum;
	
}



//算法2,时间复杂度:o(n`2)
int max_subSeq2 (int a[], int len) {
	
	int i, j;
	int maxNum=0;
	int thisNum=0;
	
	for (i=0; imaxNum){
				maxNum = thisNum;
			}
		}
	}
	
	return maxNum;
}



//算法3,时间复杂度:o(n*logn)
int max3 (int a, int b, int c) {
	if (a>b && a>c) return a;
	else if (b>a && b>c) return b;
	else return c;
}

int max_subSeq3 (int a[], int left, int right) {
	
	int leftMaxNum, rightMaxNum;
	int leftMaxBorder, rightMaxBorder;
	int leftBorder, rightBorder;
	int center;
	int i;
	
	if (left==right) {
		
		if (a[left]>0) {
			return a[left];
		}
		
		else{
			return 0;
		}
	}
	
	center = (left+right)/2;
	
	leftMaxNum = max_subSeq3(a, left, center);
	rightMaxNum = max_subSeq3(a, center+1, right);
	
	leftBorder=0;
	leftMaxBorder=0;
	
	for (i=center; i>=left; i--){
		
		leftBorder += a[i];
		
		if (leftBorder>leftMaxBorder) {
			leftMaxBorder = leftBorder;
		}
	}
	
	rightBorder = 0;
	rightMaxBorder = 0;
	
	for (i=center+1; i<=right; i++) {
		
		rightBorder += a[i];
		
		if (rightBorder>rightMaxBorder) {
			rightMaxBorder = rightBorder;
		}
	}
	
	return max3(leftMaxNum, rightMaxNum, leftMaxBorder+rightMaxBorder);
}



//算法4,时间复杂度:o(n)
int max_subSeq4 (int a[], int len) {
	
	int i;
	int maxNum=0;
	int thisNum=0;
	
	for (i=0; imaxNum) {
			maxNum = thisNum;
		}
		
		if (thisNum<0) {
			thisNum = 0;
		}
	}
	
	return maxNum;
	
}
	
	
	
int main(){
	
	int a[] = {1,-2,3,8,-6,-10,9,-2,-8,6,8,-10,9,12,-11,14,-3,1};
	int *p = &a[0];
	int len = sizeof(a)/sizeof(a[0]);
	
	cout << max_subSeq1(p,len) << endl;
	cout << max_subSeq2(p,len) << endl;
	cout << max_subSeq3(p,0,len-1) << endl;
	cout << max_subSeq4(p,len) << endl;
	
	return 0;
}

算法3和算法4要求都要掌握!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/698283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号