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

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

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

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

        
                
    }

}

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

原文地址:https://www.cnblogs.com/jmdd/p/10771448.html