题目描述:输入一个整形数组,数组里面有正数也有负数,数组中一个或连续的多个整数构成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n)。
思路分析:
代码分析:
#include<iostream>
#include<vector>
using namespace std;
int FindMax(vector<int> &vec)
{
int max = 0x80000000;//最小的负数
int tmp = 0;//临时值
vector<int>::iterator it = vec.begin();//指向开头
while(it!=vec.end())
{
if(tmp <= 0) //如果tmp变成小数了,就要把tmp的值更新到当前的下标下;
{
tmp = *it;
}
else
{
tmp += *it;//否则就累计相加
}
if(tmp > max) //max一直保存当前最大的;
{
max = tmp;
}
++it;
}
return max;
}
int main()
{
int num = 0;
cin>>num;
vector<int> vec;
while(num>0)
{
int tmp = 0;
cin>>tmp;
vec.push_back(tmp);
num --;
}
cout<<FindMax(vec)<<endl;
return 0;
}