16.16. 部分排序

105 阅读1分钟

面试题 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)