题意:
给定一个整数数组 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]
解题思路:
直接扫描,模拟判断就行,如果下一个比上一个大,就一直往后走。如果最大的在第一位或者在最后一位,那么不满足。
如果满足上一条,那么直到降序的是最后一个满足
class Solution {
public:
bool validMountainArray(vector<int>& A) {
int k = A.size(), p = 0;
while(p + 1 < k && A[p] < A[p+1]) {
p++;
}
if(p == 0 || p == k-1) { // 如果最大的在第一位或者在最后一位
return false;
}
while(p + 1 < k && A[p] > A[p+1]) {
p++;
}
if(p == k-1) { // 如果能够递减到最后一个
return true;
} else {
return false;
}
}
};