面试题 16.16. Sub Sort LCCI

143 阅读1分钟

题目描述

leetcode-cn.com/problems/su…

分析

关键在于怎么找到左,右边界 lr

算法

双指针

过程

确认两个边界后,可构建返回值

确认 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]
};