您的位置:首页 > 其它

最大子数组和

2016-05-04 19:43 183 查看
最大子数组和问题:

给定一个数组A[0,1...,N-1],求A的连续子数组,使得该子数组和最大。

如:数组:1,-2,3,10,-4,7,2,-5

子数组:3,10,-4,7,2;该子数组和为 18。

程序实现:

/***************************************
FileName MaxSumSubArray.cpp
Author : godfrey
CreatedTime : 2016/5/4
****************************************/
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int MaxSumSubArray(int* A,int size,int& from,int& to){
if( !A || size <= 0){//错误检测
from = -1;
to = -1;
return 0;
}
from = to = 0;
int sum = A[0];//当前子串的和
int result = sum;//当前子串的最优解
int FromUpdate;
for(int i=1;i<size;i++){
if(sum > 0){
sum += A[i];
}
else{
sum = A[i];
FromUpdate = i;//在sum<0时,更新子数组起点
}

if(result < sum){//当前最优解更新的时候,起点终点都更新
result = sum;
from = FromUpdate;
to = i;
}
}
return result;
}
int main()
{
int a[] = {1,-2,3,10,-4,7,2,-5};
int start,end;
int result = MaxSumSubArray(a,sizeof(a)/sizeof(int),start,end);
cout<<"the MaxSumSubArray: ";
cout<<result<<endl;
cout<<"start: "<<start<<" end: "<<end<<endl;
cout<<"The subArray is : "<<endl;
for(int i = start;i<=end;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}


运行结果:



转载请注明出处:

C++博客园:godfrey_88

http://www.cnblogs.com/gaobaoru-articles/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: