最大子数组问题

#include<iostream>
#include<time.h>
#include<conio.h>
#define N 1000
using namespace std;
void RandIn(int IntNum,int A[]) //随机生成数组
{
cout<<"整数内容"<<endl;
for(int i=0;i<IntNum;i++)
{
A[i]=rand()-rand();
cout<<A[i]; 
if(i%15==4)
cout<<endl;
else
cout<<'\t';
}
}
void SelMax(int IntNum,int A[],auto &sum)
{
int buffer=0; 
int count1=0; //求和的数值个数
int count2=0; //进行的运算次数
for(int j=0;j<=IntNum;j++)
{
if(j==IntNum)
{
j=0;
}
buffer+=A[j];
count1++;
count2++;
if(buffer<0) 
{
buffer=0;
count1=0;
}
if(sum<buffer)//sum始终记录下存在的最大和
{
sum=buffer;
}

{
break;
}
}
}
void main()
{

int IntNum;
int A[N];
int q=0;
while(q==0)
{
auto sum=0;
srand((unsigned)time(NULL));
cout<<"请输入数组元素的个数:";
cin>>IntNum;
RandIn(IntNum,A);
SelMax(IntNum,A,sum);
cout<<endl;
cout<<sum<<endl;
cout<<"是否继续测试(输入0则继续否则停止)";
cin>>q;
system("cls");
}
}

从总左边(a[0])开始遍历整个数组,一直到最右边结束(a[n-1]),在这个过程中记录到目前为止最大的子数组。假如我们已经找到a[0]到a[n-1]之间的最大子数组和,那么a[0]到a[i]之间的最大子数组和是怎样的呢?要么“还是a[0]到a[i-1]之间的最大子数组和”,要么是“从a[i]开始,往前几个连续的数的最大值”。 在求从a[i]开始,往前几个连续的数的最大值时,用到如下性质:从a[i]开始往前几个连续的数的最大值maxending_i等于(maxending_i-1)+a[i]和0两者之中的最大值,即maxending_i=max((manending_i-1)+a[i],0)

转载于:https://www.cnblogs.com/wangqun0818/p/9975670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值