连续子数组的最大和

来源:互联网 发布:终极算法pdf网盘 编辑:程序博客网 时间:2024/05/29 08:31

题目描述:输入一个整形数组,数组里面有正数也有负数,数组中一个或连续的多个整数构成一个子数组,求所有子数组的和的最大值,要求时间复杂度为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;}


原创粉丝点击