算法小练习1---返回最大升序子数组

题目
编写函数,唯一参数为任意非空整型数组,返回值为参数的最大升序子数组。

[例如]:[8,1,3,5,7,2,3,4,0]的最大升序子数组是[1,3,5,7]
方法体不允许涉及import语句。

解答

 public static void main(String[] args) {
 		//先输入数组
        int inp=0;
        int[] arr=new int[100];
        int i=0;
        while(inp!=-1){//循环控制
            Scanner sca = new Scanner(System.in)	;	
            inp=sca.nextInt();
            arr[i]=inp;
            i++;
        }
        for(int j=0;j<i;j++){
            if(j==0){
                System.out.print("你输入的数组是:{");
            }
            if(j==i-1){
                System.out.println(arr[j]+"}");
            }else{
                System.out.print(arr[j]+", ");
            }
        }
        subArray(arr);//调用函数输出结果
    }
    public static void subArray(int[] arr){
        int end =0,sta=0;//数组开始的下标sta,结束的下标end
        int length = 1;	//最后得到的数组的长度
        int length_m=1;	//临时的数组的长度
        int m=0;		//临时的结束下标,赋值给end
        int  mid=arr[1];//中间值,用于比较,指向当前i后面的一个值
        for(int i=0;i<arr.length-1;i++){

            if(mid>arr[i]){
                if(i!=arr.length-2){
                    mid=arr[i+2];
                }
                length_m++;//临时计算数组长度
                m=i+1;
            }else{
                if(i!=arr.length-2){
                    mid=arr[i+2];
                }
                length_m=1;
                continue;
            }

            if(length<length_m){
                length=length_m;
                end=m+1;
            }


        }
        sta=end-length;//计算开始下标
		//输出结果
        for(int j=sta;j<end;j++){
            if(j==end-1){
                System.out.print(arr[j]);
            }else{
                System.out.print(arr[j]+", ");
            }
        }

    }

纯粹个人练习写的,性能不佳,代码未优化,各位看客勿喷!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值