首页 > 编程语言 > 详细

一维数组最大子数组续(单步执行,回滚)

时间:2019-04-25 20:12:46      阅读:143      评论:0      收藏:0      [点我收藏+]

一:程序代码

package shuzu;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class xuexi {
	
	public static void main(String[] args) {
		int number;
		System.out.println("请输入数组的长度");
		Scanner sc=new Scanner(System.in);
		number=sc.nextInt();
		int array[]=new int[number];
		System.out.println("请输入数组的值");
		for(int i=0;i<number;i++) {
			array[i]=sc.nextInt();
		}//输入数组的值
		int maxsum,maxstart;	
		
		maxsum=array[0];
		maxstart=array[0];
		int pointstart=1,pointend=1;
		List<Integer> type1=new ArrayList<Integer>();
		List<Integer> type2=new ArrayList<Integer>();
		List<Integer> type3=new ArrayList<Integer>();
		List<Integer> type4=new ArrayList<Integer>();
		List<Integer> type5=new ArrayList<Integer>();
		
		for(int i=1;i<number;i++)
        {
			type1.add(maxstart);
            type2.add(maxsum);
            type3.add(pointstart);
            type4.add(pointend);
            type5.add(i);
            if(maxstart<0)
            {
               maxstart=0;
               pointstart=i+1;
            }
            maxstart+=array[i];//两两组合求和
            if(maxstart>maxsum)
            {
            	maxsum=maxstart;
            	pointend=i+1;
            }
            
            
            	
            	System.out.println("第"+i+"步子数组的和的数值"+maxsum +" 位置是"+pointstart+"到"+pointend +" 检查的子集的个数是:"+i+" 总共有"+number+"个数据");
            	System.out.println("请输入你要回滚的层数,输入非数字的字符进入下一步");
            	int back=0;
            	if(sc.hasNextInt())
            	{
            		back=sc.nextInt();
            		maxstart=type1.get(back-1);
            		maxsum=type2.get(back-1);
            		pointstart=type3.get(back-1);
            		pointend=type4.get(back-1);
            		i=type5.get(back-1)-1;
            	}
            	else sc.next();
            	
              
        }
        
        System.out.println("子数组的最大和为:");
        System.out.println(maxsum);
       
    }

}

  程序实验结果截图:

技术分享图片

 

技术分享图片

设计思想:首先定义存储数据类型的变量,利用arraylist数组存储记录子数组最大值,以及子数组的开始数据位置和结束数据位置,还要存储子数组的个数

定义back变量通过输入整形数字确定回滚的步揍,

             maxstart=type1.get(back-1);
              maxsum=type2.get(back-1);
              pointstart=type3.get(back-1);
              pointend=type4.get(back-1);
              i=type5.get(back-1)-1;

这些通过调用arraylist数组,把回滚后的数据复制到当前数值中

通过输入非整形字符可以单步执行程序到程序截止。

一维数组最大子数组续(单步执行,回滚)

原文:https://www.cnblogs.com/1502762920-com/p/10770619.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!