g0801_0900.s0845_longest_mountain_in_array.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0801_0900.s0845_longest_mountain_in_array;
// #Medium #Array #Dynamic_Programming #Two_Pointers #Enumeration
// #2022_03_24_Time_2_ms_(94.37%)_Space_51.9_MB_(54.85%)
/**
* 845 - Longest Mountain in Array\.
*
* Medium
*
* You may recall that an array `arr` is a **mountain array** if and only if:
*
* * `arr.length >= 3`
* * There exists some index `i` ( **0-indexed** ) with `0 < i < arr.length - 1` such that:
* * `arr[0] < arr[1] < ... < arr[i - 1] < arr[i]`
* * `arr[i] > arr[i + 1] > ... > arr[arr.length - 1]`
*
* Given an integer array `arr`, return _the length of the longest subarray, which is a mountain_. Return `0` if there is no mountain subarray.
*
* **Example 1:**
*
* **Input:** arr = [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:** arr = [2,2,2]
*
* **Output:** 0
*
* **Explanation:** There is no mountain.
*
* **Constraints:**
*
* * 1 <= arr.length <= 104
* * 0 <= arr[i] <= 104
*
* **Follow up:**
*
* * Can you solve it using only one pass?
* * Can you solve it in `O(1)` space?
**/
public class Solution {
public int longestMountain(int[] arr) {
int s = 0;
int i = 1;
while (i < arr.length - 1) {
if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) {
int j = i;
int tem = 1;
while (j > 0 && arr[j] > arr[j - 1]) {
j--;
tem++;
}
j = i;
while (j < arr.length - 1 && arr[j] > arr[j + 1]) {
j++;
tem++;
}
s = Math.max(s, tem);
i = j;
}
i++;
}
return s;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy