• 循环数组求最大子数组的和


    一.设计思想

    1.在原先的基础上考虑连接处的问题,我考虑的是可以把之前循环次数加上数组长度成为新的循环上限。例如之前循环从下标1开始,n(数组长度)结束,循环体执行n-1次,改为循环从下标1开始,2n-1处结束,循环体执行2n-2次。

    2.数组长度不变,增加一个控制变量j(数组下标),初值为1,开始位置值maxstart每往前加上一个元素,j都自加一,当j加到n(数组长度)时,j重新赋值为0。

    3.循环体执行2n-2次后,即可得出最大子数组的和。

    二.源代码

    import java.util.Scanner;
    public class ArrayMax {
    
        public static void main(String[] args){
            int number,maxsum,maxstart;
            int i,j=1;
            Scanner in = new Scanner(System.in);
            System.out.println("请输入数组的大小:");
            number=in.nextInt();
            int array[]=new int[number];
            System.out.println("请输入数组的值:");
            for(i=0;i<number;i++)
            {
                array[i]=in.nextInt();
            }
            maxsum=array[0];
            maxstart=array[0];
            for(i=1;i<2*number-1;i++)
            {
                if(maxstart<0)
                {
                    maxstart=0;
                }
                maxstart+=array[j];
                j++;
                if(maxstart>maxsum)
                    maxsum=maxstart;
                if(j==number)
                    j=0;
            }
            System.out.println("最大子数组和:"+maxsum);
            in.close();
        }
    }

    三.结果截图

    四.总结

      循环数组求最大子数组和只需要在之前的基础上考虑数组最后一个元素和第一个元素的过渡问题,循环控制总的次数,不能再用循环来控制数组的下标,需要再另设一个控制变量来控制数组下标,在下标加到成数组最后一个时,控制变量变为数组第一个元素的下标。

    五.合作过程

    1.我们先交流了一下对方的想法,讨论一下彼此的优缺点,然后我们开始自己先实现自己的程序,彼此复查对方的程序功能,找出对方存在的bug。

    2.工作照:

  • 相关阅读:
    记一次 .NET 某智能服装智造系统 内存泄漏分析
    记一次 .NET 某化妆品 webapi 卡死分析
    记一次 .NET 某公交卡扣费系统 程序卡死分析
    去掉烦人的:要恢复页面吗?Chrome未正确关闭
    C#Excel转图片代码
    ArcEngine实现pagelayout中文本元素的属性对话框
    arcgis 模型版本问题最大
    Arcengine开发所遇错误解决方案(持续更新)
    ArcEngine IPageLayout 添加经纬网和公里网
    Arcengine的复制粘贴
  • 原文地址:https://www.cnblogs.com/java-meng/p/5379993.html
Copyright © 2020-2023  润新知