求数组中最大子数组和(容器实现输入动态数组)
来源:互联网 发布:达梦数据库6.0下载 编辑:程序博客网 时间:2024/06/06 12:41
/** 算法——求数组中最大子数组和*/#include <iostream>#include <vector>using namespace std;using std::vector;vector<int> ivec;int Max_SubArray(int *pia,int len,int *start_script,int *end_script) {int max_sum=0; int i; int temp_sum=0; int start,end;for(i = 0;i != ivec.size();++i){ if(temp_sum <= 0) { temp_sum=pia[i]; end=i;start=i;} else { temp_sum += pia[i]; end=i; } if(temp_sum > max_sum) { max_sum=temp_sum; *start_script=start; *end_script=end; } }if(max_sum==0) { max_sum=pia[0]; *start_script=0;*end_script=0; for(i = 0;i != ivec.size();++i) { if(pia[i] > max_sum) { max_sum=pia[i]; *start_script=i;*end_script=i; } } } return max_sum;}int main(){int ival; int len; int start,end;int re;cin>>ival;while (ival != 0){//输入容器内元素最后以0结束ivec.push_back(ival);cin >> ival;}len=ivec.size();vector<int>::iterator iter = ivec.begin();//定义了一个迭代器类型变量iter,并且初始化指向ivec容器第一个元素//printf("%d\n",len);if(ivec.begin()==ivec.end())//vector 为空cout << "The Vector is Empty!" << endl;else{re=Max_SubArray(iter,len,&start,&end);//s,l以引用的形式传入函数,函数处理后返回相应值cout<<"Max_Sub_Array is " << re <<" And Array_Subscript From " << start << " To "<< end <<endl;}return 0;}