一维数组子数组之和

题目:返回一个一维整数数组中最大子数组的和。

要求:

输入一个一维整形数组,数组里有正数也有负数。

一维数组首尾相接,象个一条首尾相接带子一样。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。

设计思想:

生成数组,生成子数组,求和,求最大值。

代码:

package bao;
import java.util.*;
public class Msum
{
	public static void main(String args[])
	{
		Scanner input=new Scanner(System.in);
		System.out.println("请输入一维数组元素个数:");
		int num=input.nextInt();
	    int Array[]=new int[num];
	    for(int i=0;i<num;i++)
        {
            if((int)(Math.random()*2)==0)
            {
                Array[i]=(int)(Math.random()*30);//30元素最大值
            }
            else
            {
                Array[i]=-(int)(Math.random()*30);
            }
        }
        for(int i=0;i<num;i++)
        {
            System.out.println(Array[i]);
        }
        //sun[]子数组,Sum子数组元素和,找最大值maxSum
        int Sum=0,maxSum=0;
        int i=0;
        for(i=0;i<num;i++)
        {
        	Sum+=Array[i];//累加
        	if(Sum<0)//当前和小于0,重置
        	{
        		Sum=0;
        		
        	}
        	if(Sum>maxSum)
        	{
        		maxSum=Sum;
        	}
        }
        if(maxSum==0)//最大和依然为0,说明数组中元素都为负值
        {
        	maxSum=Array[0];
        	for(i=0;i<num;i++)
        	{
        		if(Array[i]>maxSum)
        		{
        			maxSum=Array[i];//最大元素即为maxSum
        		}
        	}
        }
        //输出maxSum
        System.out.println("最大子数组之和:"+maxSum);
        
        
	}
	

}

  截屏:

总结:

子数组的生成:当累加和小于零是不能是值增大,重置。

扩展可以显示和最大的子数组,及其开始结束下标。

团队照片:

posted @ 2016-04-14 21:58  sunmei  阅读(344)  评论(0编辑  收藏  举报