這是網上看到的一道面經題目,覺得很有意思。總結下。
題目:
給你一個未排序的數組,問最短從這個數組的那一段開始排序即能讓整個數組有序
比如(1,2,5,7,6,4,9),那么從 (5,7,6,4)這一段排序就足夠了
最壞情況O(N^2),最優情況O(N)時間O(1)空間
My code:
public int getMinLength(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = 1; i < nums.length; i++) {
if (nums[i] > nums[i - 1]) {
continue;
}
else {
min = Math.min(min, nums[i]);
max = Math.max(max, nums[i - 1]);
}
}
if (max == Integer.MIN_VALUE) {
return 0;
}
int begin = 0;
int end = nums.length - 1;
while (nums[begin] < min) {
begin++;
}
while (nums[end] > max) {
end--;
}
System.out.println("We should sort: [" + begin + ", " + end + "]");
return end - begin + 1;
}
自己參考了答案才寫出來。
Anyway, Good luck, Richardo! -- 09/13/2016