一维数组子数组最大和

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

要求:

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

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

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

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

设计思想:

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

代码:

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);
        
        
	}
	

}

截屏 :

总结:

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

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

团队照片:

转载于:https://www.cnblogs.com/xuemo/p/5393182.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值