思路:先遍历一遍数组,找到最大值max以及最大值索引max_index,然后从此处设立两个指针left和right,一个向左遍历,一个向右遍历,max左右两边应该都是递减的;
class Solution {
public:
bool validMountainArray(vector<int> &A)
{
int len = A.size();
if (len < 3)
{
return false;
}
int max_index = 0, max = 0;
//找出山峰
for (int i = 0; i < len; i++)
{
if (A[i] > max)
{
max = A[i];
max_index = i;
}
}
//整个数组都是递增or递减时,return false
if (max_index == 0 || max_index == len - 1)
{
return false;
}
//从山峰开上向左和向右检查,左右两边应该都是递减的
int left = max_index - 1, right = max_index + 1;
while (left >= 0)
{
if (A[left] > A[left + 1])
{
return false;
}
left--;
}
while (right < len)
{
if (A[right] >= A[right - 1])
{
return false;
}
right++;
}
return true;
}
};