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


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

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

      输入数组长度: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]);
            }
    
            
                    
        }
    
    }

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

  • 相关阅读:
    java 多线程(synchronized)
    java 多线程(daemon)
    【转】 Nginx深入详解之多进程网络模型
    Linux 网络编程(epoll)
    Linux 网络编程(多路复用)
    Linux 网络编程(UDP)
    Linux 网络编程(TCP)
    STM32F0xx_看门狗(独立+窗口)配置详细过程
    STM32F0xx_FLASH编程(片内)配置详细过程
    STM32F0xx_RTC实时时钟配置详细过程
  • 原文地址:https://www.cnblogs.com/jmdd/p/10771448.html
Copyright © 2020-2023  润新知