定义两个指针,一个从头开始,如果一路递增则记录最后值;一个从尾开始,一路递增则记录最后值,如果最后两个指针的最后值一样,则返回true
算法思想: 双指针法+栈
/**
* @param {number[]} A
* @return {boolean}
*/
var validMountainArray = function(A) {
// 双指针
if(A.length<3) return false;
let left_z = 0, right_z = A.length - 1;
let stack = [A[0]], popshtack = [A[A.length - 1]];
while(A.length > 0){
let top = stack.pop();
if(A[left_z+1] >= top){
left_z++;
stack.push(A[left_z]);
} else {
break;
}
}
while(A.length > 0){
let top = popshtack.pop();
if(A[right_z-1] > top){
right_z--;
popshtack.push(A[right_z]);
} else {
break;
}
}
if(left_z === A.length - 1 || right_z === 0){
return false;
}
return left_z === right_z;
};
网友评论