面试题(2)——求子数组最大和

来源:互联网 发布:天猫魔盒好用软件 编辑:程序博客网 时间:2024/06/04 19:35

题目来源: http://blog.csdn.net/v_july_v

题目:
输入一个整形数组,里有正也负。
数组中连续的一个或多整成子,每都有和。
求所有子数组的和最大值。要时间复杂度为 O(n)。
例如输入的数组为1,-2,3,10,-4,7,2,-5
,和最大 的子数组为3,10,-4,7,2
因此输出为该子数组的和 18 。


#include<iostream>using namespace std;void maxSubArray(int a[], int size){int max=-(1<<31),sum=0;int i,left,right;for(i=0;i<size;i++){sum+=a[i];if(sum<0) {sum=0;left=i+1;}else{if(max<sum){max=sum;right=i;}}}cout<<"The sum of the maxSubArray: "<<max<<endl;for(i=left;i<=right;i++){cout<<a[i]<<" ";}cout<<endl;}int main(){int a[8]={1,-2,3,10,-4,7,2,-5};maxSubArray(a,8);return 0;}


原创粉丝点击