• 一维数组子数组最大和


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

    要求:

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

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

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

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

    设计思想:

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

    代码:

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

    截屏 :

    总结:

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

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

    团队照片:

  • 相关阅读:
    web框架本质及第一个Django实例
    jQuery练习题HTML文件
    jQuery快速入门
    前端之JS
    前端基础之HTML
    前端基础之css
    并发编程之 协程
    Linux目录结构详解
    第三周 time库
    网络打印机拒绝访问,无法连接处理方法汇总
  • 原文地址:https://www.cnblogs.com/xuemo/p/5393182.html
Copyright © 2020-2023  润新知