题目:
编写函数,唯一参数为任意非空整型数组,返回值为参数的最大升序子数组。
[例如]:[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]+", ");
}
}
}
纯粹个人练习写的,性能不佳,代码未优化,各位看客勿喷!!!