思路
首先从左往右遍历,然后设定一个Max,如果遍历的过程中array[i]大于Max,则置换Max,若小于Max,则指定 k 记录该位置。
然后再从右往左遍历,设定一个Min,在遍历的过程中array[i]小于Min,则置换Min,若大于Min,则指定 j 记录该位置。
于是 j~~k之间的就是需要排序的。
如上例,Max首先是1,然后遍历
Max=1,array[i]=1,置换Max,Max=1
Max=1,array[i]=5,置换Max,Max=5
Max=5,array[i]=3,k指向3,k=2,此时5~~3之间需要排序
Max=5,array[i]=4,k指向4,k=3,此时5~~4之间需要排序
依次类推,k最终指向2.
从右往左遍历的结果类似。
public class ShortNeedSortNum {
public static void main(String[] args) {
int[] arr = {4,5,3,2,1,6,7};
System.out.println(getMinlength(arr));
}
public static int getMinlength(int[] arr){
if(arr==null||arr.length==0){
return 0;
}
int length = arr.length;
int min = arr[length-1];
int noMinIndex = -1;
for(int i=length-2; i>=0; i--){
if(arr[i]>min){
noMinIndex = i;
}else{
min = arr[i];
}
}
if(noMinIndex==-1){
return 0;
}
int max = arr[0];
int noMaxIndex = -1;
for(int i=1; i<length; i++){
if(arr[i]<max){
noMaxIndex = i;
}else{
max = arr[i];
}
}
return noMaxIndex-noMinIndex+1;
}
}