求子数组的最大和

 

#include <iostream>   

using namespace std;

 

int maxSum(int* a, int n)  

{  

    int sum=0;  

    int b=0;       

    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 maxSum1(int* a, int n)  

{  

    int sum=0;  

    int b=0;  

	int i=0;

    while(i<n)

	{

		sum+=a[i++];

		if (b<sum)

		{

			b=sum;

		}

		else if (sum<0)

		{

			sum=0;

		}

	}

    return b;  

} 



int maxSum2(int* a, int n)  

{  

    int sum;  

    int b=0;  

	int i=0, j;

    for (i=0; i<n; i++)

    {

		sum=0;

		for(j=i; j<n; j++)

		{

			sum+=a[j];

			if (b<sum)

			{

				b=sum;

			}

		}

    }

    return b;  

}     

  

int main()  

{  

    int a[10]={1, -2, 3, 10, -4, 7, 2, -5};    

    cout<<maxSum2(a,8)<<endl;  

    return 0;  

} 

 maxSum和maxSum1的时间复杂度都是O(n), maxSum2的时间复杂度是O(n^2).

maxSum算法设计

1、遍历数组中的每个元素进行累加,如果累加值小于0,则进行重新累加。

2、用变量sum保存每次累加值比sum的值。

maxSum2算法设计

1、依次从第一个节点遍历最后一个节点。

2、累加每次遍历的结果,用sum保存最大的值。

你可能感兴趣的:(数组)