标签:
3.求子数组的最大和
题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大 。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
因此输出为该子数组的和18。
//从第一个数开始加,和记为sum,用一个变量max记录最大和,如果和小于0,sum=0,扫描整个数组。 #include<iostream> #include<cstdio> #include <limits> #include<vector> using namespace std; #define INT_MIN (numeric_limits<int>::min)() int main(){ int _max=INT_MIN,sum=0,temp,i; vector<int>_array; _array.reserve(1000);//设置容器大小,提高效率 while(~scanf("%d",&temp)){ if(temp>_max) _max=temp;//记录最大值 _array.push_back(temp); } if(_max<=0) { printf("该数组的子数组最大和为:%d\n",_max); return 0; } for(i=0;i<_array.size();i++){ if(sum<0) sum=0; sum+=_array[i]; if(sum>_max) _max=sum; } printf("该数组的子数组最大和为:%d\n",_max); return 0; }
标签:
原文地址:http://www.cnblogs.com/wabi87547568/p/5259472.html