1. 程式人生 > >心有多遠 就能走遠 只要你想

心有多遠 就能走遠 只要你想

3.求子陣列的最大和(陣列)
題目:
輸入一個整形陣列,數組裡有正數也有負數。
陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。
求所有子陣列的和的最大值。要求時間複雜度為O(n)。

例如輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,和最大的子陣列為3, 10, -4, 7, 2,
因此輸出為該子陣列的和18。

#include <iostream>
#include <malloc.h>
#include <stdlib.h>
using namespace std;
void main()
{
	int a[1000];
	int i=0;
	int n,max,s;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>a[i];
	}
	s=max=a[0];
	for(i=1;i<n;i++)
	{
		if(s+a[i]>=a[i])
		{
			s+=a[i];
		}
		else
			s=a[i];
		if(max<s)
			max=s;
	}
	cout<<max<<endl;
}