website/content.en/ChapterFour/0800~0899/0845.Longest-Mountain-in-Array.md
Let's call any (contiguous) subarray B (of A) a mountain if the following properties hold:
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:
Follow up:
This problem tests the sliding window technique.
Given an array, the task is to find the length of the longest "mountain" in the array. A "mountain" means starting from a number, gradually increasing, and after reaching the peak, gradually decreasing.
The solution approach for this problem is also sliding window, except that during the sliding process, you only need to additionally determine the increasing and decreasing states.
package leetcode
func longestMountain(A []int) int {
left, right, res, isAscending := 0, 0, 0, true
for left < len(A) {
if right+1 < len(A) && ((isAscending == true && A[right+1] > A[left] && A[right+1] > A[right]) || (right != left && A[right+1] < A[right])) {
if A[right+1] < A[right] {
isAscending = false
}
right++
} else {
if right != left && isAscending == false {
res = max(res, right-left+1)
}
left++
if right < left {
right = left
}
if right == left {
isAscending = true
}
}
}
return res
}