Valid Mountain Array
Given an array of integers arr
, return true
if and only if it is a valid mountain array.
Recall that arr is a mountain array if and only if:
arr.length >= 3
There exists some
i
with0 < i < arr.length - 1
such that:arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]

Example 1:
Input: arr = [2,1]
Output: false
Example 2:
Input: arr = [3,5,5]
Output: false
Example 3:
Input: arr = [0,3,2,1]
Output: true
Constraints:
1 <= arr.length <= 104
0 <= arr[i] <= 104
Solutions
🧠 Cpp
class Solution
{
public:
//O(n) solution
bool validMountainArray(vector<int>& A)
{
//empty is no mountain
if(A.empty())
return false;
bool going_up = true;
for(auto iter = ++begin(A); iter < end(A); ++iter)
{
//no flat
if(*iter == *prev(iter))
return false;
//go up
if(*prev(iter) < *iter)
{
//if we went up after we went down
if(!going_up)
return false;
}
//go down
else if(*prev(iter) > *iter )
{
//if we going down from the start
if(prev(iter) == begin(A))
return false;
//started to gow down
if(going_up)
going_up = false;
}
}
//if we were going up all the time, return false
return !going_up;
}
};
Last updated
Was this helpful?