题目:
在一个数组中找出所有比它前面的数都大,比它后面的数都小的数,若有,则输出,若没有输出-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];
}