【每日算法】js 在一个数组中找出所有比它前面的数都大,比它后面的数都小的数,复杂度和空间均为O(n)

122 阅读1分钟

题目:

在一个数组中找出所有比它前面的数都大,比它后面的数都小的数,若有,则输出,若没有输出-1,复杂度和空间均为O(n)。

代码如下:

    onst arrOrigin = [21,11,45,56,9,66,77,89,78,68,100,120,111];
    const ret = findItem(arrOrigin);
    console.log(ret);

    function findItem(arrOrigin){
        let arrMin = []; 
        let len = arrOrigin.length;
        let intMax = arrOrigin[0];
        arrMin[len-1] = arrOrigin[len-1];
        let ret = [];
        
        //构造查找表
        for(let i=len-2; i>=0; i--){
            arrMin[i] = arrOrigin[i] < arrMin[i+1] ? arrOrigin[i] : arrMin[i+1];
        }
        for(let i=0; i<len; i++){
            if(arrOrigin[i] >= intMax && arrOrigin[i] <= arrMin[i]){
                ret.push(arrOrigin[i]);
            }
            if(intMax < arrOrigin[i]){
                intMax = arrOrigin[i];
            }
        }

        return ret.length ? ret : [-1];
    }