面试题 16.16. 部分排序 leetcode-cn.com/problems/su… 思路: 从左往右遍历,寻找当前遍历过的数中最大的值,并与当前值比较,如果当前值小于最大值,记录当前值的位置r, 从右往左遍历,寻找当前遍历过的数中最小的值,并与当前值比较,如果当前值大于最小值,记录当前值的位置l, 最后返回{l,r}
class Solution {
public int[] subSort(int[] array) {
if(array.length==0)return new int[] {-1,-1};
int max = array[0];
int index = 0;
int r = -1;
while(index<array.length){
max = Math.max(max,array[index]);
if(array[index]<max){
r=index;
}
index++;
}
int min = array[array.length-1];
index = array.length-1;
int l = -1;
while(index>=0){
min = Math.min(min,array[index]);
if(array[index]>min){
l=index;
}
index--;
}
return new int[] {l,r};
}
}
空间复杂度O(1),时间复杂度O(n)