• 求最大连续一维子数组和,实现过程遍历回滚


      最大连续一维子数组过程遍历回滚:

      在最大子数组的前提下,遍历具体计算过程,并且可以回滚查看步骤,下面是我的输出结果

      输入数组长度:5

      输入数组元素:1 2 3 4 5

      

    实验代码如下:

    /*
     * 最大子数组
     * 最大子数组的和
     * 检查的那个最大子数组
     * 
     * 4.25 + 步骤回滚
     */
    package wodeshiyao;
    
    import java.util.Scanner;
    
    
    public class lalala {
        
        static String[] demo = new String[100];
        
        
        static Scanner scan=new Scanner(System.in);
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            int n = 1;
            int b;//数组长度
            System.out.println("请输入数组长度:");
            b=scan.nextInt();                        //扫描下一行,获取数组长度
            
            
            int a[]=new int [b];    //定义规定长度的整型数组
            System.out.println("请输入数组元素:");
            for(int i=0;i<b;i++)                    //用for循环逐个扫描录入各个数组元素
            {
                a[i]=scan.nextInt();
            }
            
            
            int i,j,k;
            int max[]=new int [b];//max 存放数组和的值的数组
            for(i=0;i<b;i++){    //找出以第i个元素开头的子数组的最大值
                
                max[i]=a[i];
                k=a[i];
                demo[n-1] = "第" + n + "步:" +"此时的最大子数组和为" + k + ",从" + a[i] + "到" + a[i] + "的和。";
                n++;
                System.out.println("此时以第"+(i+1)+"个元素开头的子数组的最大值为:"+k);
                for(j=i+1;j<b;j++){        //第i个元素到第j个元素的和的最大值
                    k=k+a[j];
                    if(k>max[i])
                    {
                        max[i]=k;
                        demo[n-1] = "第" + n + "步:" +"此时的最大子数组和为" + k + ",从" + a[i] + "到" + a[j] + "的和。";
                        n++;
                    }
                }
            }
            
            
            int m=max[0];
            for(i=1;i<b;i++)        //找出max数组的最大值
            {
                if(max[i]>m)
                {
                    m=max[i];
                }
            }
            System.out.println("所有连续子数组和的最大值为:"+m);
            System.out.println("--------------------------------");
            for(int g = 0 ; g < b*(b+1)/2; g++)
            {
                System.out.println(demo[g]);
            }
            System.out.println("--------------------------------");
            System.out.println("请输入需要开始回滚的步数:");
            int v = scan.nextInt();
            for(int g = v-1; g < b*(b+1)/2; g++)
            {
                System.out.println(demo[g]);
            }
    
            
                    
        }
    
    }

      同样适用正负数混合一维数组数组。

  • 相关阅读:
    Dubbo学习系列之六(微服务架构实战)
    流式计算(二)-Kafka Stream
    流式计算(一)-Java8Stream
    Dubbo学习系列之七(分布式订单ID方案)
    Dubbo学习系列之十六(ELK海量日志分析框架)
    什么情况下不能使用 Java 泛型
    Java Stream 流如何进行合并操作
    可别在代码中写那么多魔法值了,脑壳疼!
    你知道如何自动保存 Spring Boot 应用进程号吗
    Spring 官方发起Spring Authorization Server 项目
  • 原文地址:https://www.cnblogs.com/jmdd/p/10771448.html
Copyright © 2020-2023  润新知