# How to Find the Longest Mountain in Array in Java ## The challenge

Let’s call any (contiguous) subarray B (of A) a mountain if the following properties hold:

• `B.length >= 3`
• There exists some `0 < i < B.length - 1` such that `B < B < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]`

(Note that B could be any subarray of A, including the entire array A.)

Given an array `A` of integers, return the length of the longest mountain

Return `0` if there is no mountain.

Example 1:

```Input: [2,1,4,7,3,2,5]
Output: 5
Explanation: The largest mountain is [1,4,7,3,2] which has length 5.```

Example 2:

```Input: [2,2,2]
Output: 0
Explanation: There is no mountain.```

Note:

1. `0 <= A.length <= 10000`
2. `0 <= A[i] <= 10000`

• Can you solve it using only one pass?
• Can you solve it in `O(1)` space?

## The solution in Java code

```class Solution {
public int longestMountain(int[] A) {
int N = A.length;
int answer = 0, base = 0;

while (base < N) {
int end = base;

if (end + 1 < N && A[end] < A[end + 1]) {

while (end + 1 < N && A[end] < A[end + 1]) end++;

if (end + 1 < N && A[end] > A[end + 1]) {
while (end + 1 < N && A[end] > A[end + 1])
end++;
}
}

base = Math.max(end, base + 1);
} 