class Solution {
public:
bool validMountainArray(vector<int>& A) {
if(A.size()<3) return false;
int fg=A[1]-A[0]; // fg用来纪录前面时刻山脉的趋势
if(fg<=0) return false;
for(int i=1;i<A.size();i++){
if(A[i]-A[i-1]==0) return false;
else if(fg>0){
fg=A[i]-A[i-1];
}
else{
if(A[i]-A[i-1]>0) return false;
}
}
// 循环结束,如果fg<0说明true
if(fg<0) return true;
else return false;
}
};
class Solution {
public:
bool validMountainArray(vector<int>& A) {
int len=A.size();
int p=1;
if(len<3 || A[1]-A[0]<=0) return false;
// 先增
while(p<len){
if(A[p]-A[p-1]==0) return false;
else if(A[p]-A[p-1]>0) p++;
else break;
}
// 下降
while(p<len){
if(A[p]-A[p-1]==0) return false;
else if(A[p]-A[p-1]<0) p++;
else break;
}
// 结束
if(p!=len || A[len-1]-A[len-2]>=0) return false;
else return true;
}
};
class Solution {
public:
// 双指针
bool validMountainArray(vector<int>& A) {
int len=A.size();
int start=0,end=len-1;
if(len <3 || A[1]-A[0]<=0 || A[end-1]-A[end]<=0) return false;
while(start<len){
if(A[start+1]-A[start]>0) start++;
else if(A[start+1]-A[start]==0) return false;
else break;
}
while(end>start){
if(A[end]-A[end-1]<0) end--;
else if(A[end]-A[end-1]==0) return false;
else break;
}
if(start==end) return true;
else return false;
}
};