题目描述:
给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:
- A.length >= 3
- 在 0 < i < A.length - 1 条件下,存在 i 使得:
- A[0] < A[1] < … A[i-1] < A[i]
- A[i] > A[i+1] > … > A[A.length - 1]
- 题解:
- 用左右两个指针向中间去爬高。
- 左指针从左往右扫描,当它所指的后一个元素比前一个大时,移动一下;否则停止移动,此时找到最高点
- 接着右指针从右往左扫描,当它所值哦前一个数比后一个数大时,移动,否则停止,此时达到最高点
- 然后判断左右指针是否相等,如果相等且不在数组两端则返回true,否则返回false
var validMountainArray = function(A) {
let right = A.length - 1;
let left = 0;
if (A.length < 3) {
return false;
} else {
// left+1 < A.length-1是为了防止数组下标越界
while (left + 1 < A.length - 1 && A[left + 1] > A[left]) {
left++;
}
while (right - 1 > 0 && A[right - 1] > A[right]) {
right--;
}
if (left == right && left != A.length - 1 && left != 0) {
return true;
} else {
return false;
}
}
};