题目描述
分析
关键在于怎么找到左,右边界 l 与 r
算法
双指针
过程
确认两个边界后,可构建返回值
确认 l
从右向左遍历,记录并不断更新最小值,如果当前遍历的 item 大于这个值,说明他在待排序区间中,因此更新 l 到当前 index
确认 r
同上面相反
构建返回值
[l, r]
代码
/**
* @param {number[]} array
* @return {number[]}
*/
var subSort = function(array) {
let l = -1, r = -1, max = Number.MIN_SAFE_INTEGER, min = Number.MAX_SAFE_INTEGER
const n = array.length
for (let i = 0; i < n; i++) {
if (array[i] >= max) {
max = array[i]
} else {
r = i
}
}
for (let i = n - 1; i >= 0; i--) {
if (array[i] <= min) {
min = array[i]
} else {
l = i
}
}
return [l, r]
};