返回一个整数数组中最大子数组的和

题目:返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。

设计思想:

从第一个数开始把数组相加,每加一个数对和进行判断,如果小于零,抛弃当前值,如果大于零,下一个数与零比较,小于零时,先将最大值与之前的和比较,在让和加上这个数,如果大于零,直接让和加上这个数,再取最大值和和之间的最大值。

源代码:

import java.util.Random;


public class max {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n=20;
        int C[]=new int[n];
        int a=0;
        int MAX=0;
        int b=0;
        
        Random rand=new Random();
        
        for(int i=0;i<n;i++)
        {
            a=rand.nextInt(2);
            if(a==0)
            {
               C[i]=rand.nextInt(10);
            }
            else
            {
               C[i]=-rand.nextInt(10);
            }
        }
        
        b=C[0];
        MAX=b;
        for(int i=1;i<n;i++)
        {
            if(b<0)
            {
                b=C[i];
                if(MAX<b)
                {
                   MAX=b;
                }
            }
            else
            {
                if(C[i]<=0)
                {
                    if(MAX<b)
                    {
                        MAX=b;
                    }
                    b=b+C[i];
                }
                else
                { 
                    b=b+C[i];
                    if(MAX<b)
                    {
                        MAX=b;
                    }
                }
                
            }
        }
        System.out.print("数组为:");
        for(int i=0;i<n;i++)
        {
            System.out.print(C[i]+" ");
        }
        System.out.println();
        System.out.print("最大数组和为:"+MAX);
    }
    
}

运行结果截图:

 

posted @ 2015-03-23 16:45  风雨同行  阅读(174)  评论(1编辑  收藏  举报