diff --git a/solution/0800-0899/0845.Longest Mountain in Array/README.md b/solution/0800-0899/0845.Longest Mountain in Array/README.md index 0bded80a711f8..09a6794dce130 100644 --- a/solution/0800-0899/0845.Longest Mountain in Array/README.md +++ b/solution/0800-0899/0845.Longest Mountain in Array/README.md @@ -67,7 +67,35 @@ ```python - +class Solution: + def longestMountain(self, arr: List[int]) -> int: + left, right = 0, 1 + status = -1 + ans = 0 + while right < len(arr): + if status == -1 or status == 1: + if arr[right] == arr[right - 1]: + status = -1 + if status == -1: + if arr[right] > arr[right - 1]: + status = 1 + else: + left = right + if status == 1 and arr[right] < arr[right - 1]: + status = 2 + else: + if arr[right] == arr[right - 1]: + status = -1 + ans = max(ans, right - left) + left = right + elif arr[right] > arr[right - 1]: + status = 1 + ans = max(ans, right - left) + left = right - 1 + right += 1 + if status == 2: + ans = max(right - left, ans) + return ans ``` ### **Java** @@ -75,7 +103,44 @@ ```java - +class Solution { + public int longestMountain(int[] arr) { + int left = 0, right = 0; + int ans = 0; + int status = -1; + while (++right < arr.length) { + if (status == -1 || status == 1) { + if (arr[right] == arr[right - 1]) { + status = -1; + } + if (status == -1) { + if (arr[right] > arr[right - 1]) { + status = 1; + } else { + left = right; + } + } + if (status == 1 && arr[right] < arr[right - 1]) { + status = 2; + } + } else { + if (arr[right] > arr[right - 1]) { + status = 1; + ans = Math.max(right - left, ans); + left = right - 1; + } else if (arr[right] == arr[right - 1]) { + status = -1; + ans = Math.max(right - left, ans); + left = right; + } + } + } + if (status == 2) { + ans = Math.max(ans, right - left); + } + return ans; + } +} ``` ### **...** diff --git a/solution/0800-0899/0845.Longest Mountain in Array/README_EN.md b/solution/0800-0899/0845.Longest Mountain in Array/README_EN.md index fc783fcfc4ee6..36bd04e924caf 100644 --- a/solution/0800-0899/0845.Longest Mountain in Array/README_EN.md +++ b/solution/0800-0899/0845.Longest Mountain in Array/README_EN.md @@ -58,13 +58,78 @@ ### **Python3** ```python - +class Solution: + def longestMountain(self, arr: List[int]) -> int: + left, right = 0, 1 + status = -1 + ans = 0 + while right < len(arr): + if status == -1 or status == 1: + if arr[right] == arr[right - 1]: + status = -1 + if status == -1: + if arr[right] > arr[right - 1]: + status = 1 + else: + left = right + if status == 1 and arr[right] < arr[right - 1]: + status = 2 + else: + if arr[right] == arr[right - 1]: + status = -1 + ans = max(ans, right - left) + left = right + elif arr[right] > arr[right - 1]: + status = 1 + ans = max(ans, right - left) + left = right - 1 + right += 1 + if status == 2: + ans = max(right - left, ans) + return ans ``` ### **Java** ```java - +class Solution { + public int longestMountain(int[] arr) { + int left = 0, right = 0; + int ans = 0; + int status = -1; + while (++right < arr.length) { + if (status == -1 || status == 1) { + if (arr[right] == arr[right - 1]) { + status = -1; + } + if (status == -1) { + if (arr[right] > arr[right - 1]) { + status = 1; + } else { + left = right; + } + } + if (status == 1 && arr[right] < arr[right - 1]) { + status = 2; + } + } else { + if (arr[right] > arr[right - 1]) { + status = 1; + ans = Math.max(right - left, ans); + left = right - 1; + } else if (arr[right] == arr[right - 1]) { + status = -1; + ans = Math.max(right - left, ans); + left = right; + } + } + } + if (status == 2) { + ans = Math.max(ans, right - left); + } + return ans; + } +} ``` ### **...** diff --git a/solution/0800-0899/0845.Longest Mountain in Array/Solution.java b/solution/0800-0899/0845.Longest Mountain in Array/Solution.java new file mode 100644 index 0000000000000..7bd98b0893664 --- /dev/null +++ b/solution/0800-0899/0845.Longest Mountain in Array/Solution.java @@ -0,0 +1,38 @@ +class Solution { + public int longestMountain(int[] arr) { + int left = 0, right = 0; + int ans = 0; + int status = -1; + while (++right < arr.length) { + if (status == -1 || status == 1) { + if (arr[right] == arr[right - 1]) { + status = -1; + } + if (status == -1) { + if (arr[right] > arr[right - 1]) { + status = 1; + } else { + left = right; + } + } + if (status == 1 && arr[right] < arr[right - 1]) { + status = 2; + } + } else { + if (arr[right] > arr[right - 1]) { + status = 1; + ans = Math.max(right - left, ans); + left = right - 1; + } else if (arr[right] == arr[right - 1]) { + status = -1; + ans = Math.max(right - left, ans); + left = right; + } + } + } + if (status == 2) { + ans = Math.max(ans, right - left); + } + return ans; + } +} \ No newline at end of file diff --git a/solution/0800-0899/0845.Longest Mountain in Array/Solution.py b/solution/0800-0899/0845.Longest Mountain in Array/Solution.py new file mode 100644 index 0000000000000..0b392748c2440 --- /dev/null +++ b/solution/0800-0899/0845.Longest Mountain in Array/Solution.py @@ -0,0 +1,29 @@ +class Solution: + def longestMountain(self, arr: List[int]) -> int: + left, right = 0, 1 + status = -1 + ans = 0 + while right < len(arr): + if status == -1 or status == 1: + if arr[right] == arr[right - 1]: + status = -1 + if status == -1: + if arr[right] > arr[right - 1]: + status = 1 + else: + left = right + if status == 1 and arr[right] < arr[right - 1]: + status = 2 + else: + if arr[right] == arr[right - 1]: + status = -1 + ans = max(ans, right - left) + left = right + elif arr[right] > arr[right - 1]: + status = 1 + ans = max(ans, right - left) + left = right - 1 + right += 1 + if status == 2: + ans = max(right - left, ans) + return ans \ No newline at end of file