题目
给定一个无序数组arr,要使数组排序成递增的,求出需要排序的最短子数组长度。
代码实现
public class GetMinLength {
public int getMinLength(int[] arr) {
if (arr == null || arr.length < 2) {
return 0;
}
int min = arr[arr.length - 1];
int noMinIndex = -1;
for (int i = arr.length - 2; i != -1; 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 != arr.length; i++) {
if (arr[i] < max) {
noMaxIndex = i;
} else {
max = arr[i];
}
}
return noMaxIndex - noMinIndex + 1;
}
public static void main(String[] args) {
GetMinLength gml = new GetMinLength();
int[] arr = new int[]{1, 3, 4, 6, 5, 4, 4, 7,9};
System.out.println(gml.getMinLength(arr));
}
}