3.求子數組的最大和

 題目:輸入一個整形數組,數組裏有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。

           求所有子數組的和的最大值。要求時間複雜度爲O(n)。
例如

輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,因此輸出爲該子數組的和18。

//


#include<iostream>
using namespace std;

int maxsum(int *a,int n)
{
	int b=0;
	int sum=0;

	int c=a[0];
	for(int i=1;i<n;i++)
	{
		if(a[i]>c)
			c=a[i];
	}

	if(c<0)
		return c;

	for(int i=0;i<n;i++)
	{
		if(b<0)
			b=a[i];
		else
			b+=a[i];
		if(sum<b)
			sum=b;

	}
	return sum;
}

int main()
{
	int a[8]={1,-2,3,10,-4,7,2,-5};
	cout<<maxsum(a,8)<<endl;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章