思路:
找出第一个小于或等于前一个数的数,假定前一个数的位置是top,再判断这个top后面是否符合递减。
代码:
class Solution {
public:
bool validMountainArray(vector<int>& A) {
if(A.size()<3)
return false;
int preNum=A[0];
int topIndex=0;
for(int i=1;i<A.size();i++){
if(A[i]<=preNum)
{ topIndex = i-1;
break;}
preNum = A[i];
}
preNum = A[topIndex];
for(int i=topIndex+1;i<A.size();i++){
if(topIndex == 0 || topIndex == A.size() )
return false;
if(preNum <= A[i] )
return false;
preNum = A[i];
}
return true;
}
};
开始的时候忘记更新这两个值,导致无法通过。
官方解答很优雅:
class Solution {
public:
bool validMountainArray(vector<int>& A) {
int N = A.size();
int i = 0;
// 递增扫描
while (i + 1 < N && A[i] < A[i + 1]) {
i++;
}
// 最高点不能是数组的第一个位置或最后一个位置
if (i == 0 || i == N - 1) {
return false;
}
// 递减扫描
while (i + 1 < N && A[i] > A[i + 1]) {
i++;
}
return i == N - 1;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/valid-mountain-array/solution/you-xiao-de-shan-mai-shu-zu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
还看到一种思路:从前往后和从后往前遍历,找到最高的点,对比两个是否是同一个位置。