zoukankan      html  css  js  c++  java
  • 循环数组求最大子数组的和

    一.设计思想

    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.工作照:

  • 相关阅读:
    爬虫|如何在Pycharm中调试JS代码
    nexus 6p 输入8.1和获取root权限
    年近30的我,离开了北京,回家做个老百姓,等待那一刻的发生!
    Azure认知服务的实际应用-资讯采集推送
    C#类库推荐 拼多多.Net SDK,开源免费!
    [翻译]EntityFramework Core 2.2 发布
    4-如何学习和解决问题
    3-WIN10系统及开发工具支持
    2-选择学习的目标和方向
    1-编程的基本条件和起步
  • 原文地址:https://www.cnblogs.com/java-meng/p/5379993.html
Copyright © 2011-2022 走看看