题目描述
分析
要求找需要排序的区间
算法
双指针
过程
左指针:左边元素需要排序是因为比右边元素大,因此左指针会根据右边元素的最小值寻找
右指针:右边元素需要排序是因为比左边元素小,因此右指针会根据左边元素的最大值寻找
代码
/**
* @param {number[]} array
* @return {number[]}
*/
var subSort = function (array) {
let r = -1,
l = -1
//正向遍历记录最右区间值
let max = Number.MIN_SAFE_INTEGER
for (let i = 0; i < array.length; i++) {
if (array[i] >= max) {
max = array[i]
} else {
r = i
}
}
//反向遍历记录最左区间值
let min = Number.MAX_SAFE_INTEGER
for (let i = array.length - 1; i >= 0; i--) {
if (array[i] <= min) {
min = array[i]
} else {
l = i
}
}
return [l, r]
}