Longest Mountain in Array
Description
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 thatB[0] < B[1] < ... 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:
0 <= A.length <= 10000
0 <= A[i] <= 10000
Follow up:
- Can you solve it using only one pass?
- Can you solve it in
O(1)
space?
Solution(javascript)
/*
* @lc app=leetcode id=845 lang=javascript
*
* [845] Longest Mountain in Array
*/
// @lc code=start
/**
* @param {number[]} A
* @return {number}
*/
const longestMountain = function (A) {
let max = 0
for (let left = 0; left < A.length; left++) {
let right = left
while (A[right] < A[right + 1]) {
right++
}
const top = right
while (right > left && A[right] > A[right + 1]) {
right++
}
if (right > top && top > left) {
max = Math.max(max, right - left + 1)
left = right
left--
}
}
return max
}
// @lc code=end