Skip to content

Commit 4ff8adf

Browse files
authored
feat: add solutions to lc problem: No.0845 (#792)
No.0845.Longest Mountain in Array
1 parent 7efc5cf commit 4ff8adf

File tree

4 files changed

+201
-4
lines changed

4 files changed

+201
-4
lines changed

solution/0800-0899/0845.Longest Mountain in Array/README.md

+67-2
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,80 @@
6767
<!-- 这里可写当前语言的特殊实现逻辑 -->
6868

6969
```python
70-
70+
class Solution:
71+
def longestMountain(self, arr: List[int]) -> int:
72+
left, right = 0, 1
73+
status = -1
74+
ans = 0
75+
while right < len(arr):
76+
if status == -1 or status == 1:
77+
if arr[right] == arr[right - 1]:
78+
status = -1
79+
if status == -1:
80+
if arr[right] > arr[right - 1]:
81+
status = 1
82+
else:
83+
left = right
84+
if status == 1 and arr[right] < arr[right - 1]:
85+
status = 2
86+
else:
87+
if arr[right] == arr[right - 1]:
88+
status = -1
89+
ans = max(ans, right - left)
90+
left = right
91+
elif arr[right] > arr[right - 1]:
92+
status = 1
93+
ans = max(ans, right - left)
94+
left = right - 1
95+
right += 1
96+
if status == 2:
97+
ans = max(right - left, ans)
98+
return ans
7199
```
72100

73101
### **Java**
74102

75103
<!-- 这里可写当前语言的特殊实现逻辑 -->
76104

77105
```java
78-
106+
class Solution {
107+
public int longestMountain(int[] arr) {
108+
int left = 0, right = 0;
109+
int ans = 0;
110+
int status = -1;
111+
while (++right < arr.length) {
112+
if (status == -1 || status == 1) {
113+
if (arr[right] == arr[right - 1]) {
114+
status = -1;
115+
}
116+
if (status == -1) {
117+
if (arr[right] > arr[right - 1]) {
118+
status = 1;
119+
} else {
120+
left = right;
121+
}
122+
}
123+
if (status == 1 && arr[right] < arr[right - 1]) {
124+
status = 2;
125+
}
126+
} else {
127+
if (arr[right] > arr[right - 1]) {
128+
status = 1;
129+
ans = Math.max(right - left, ans);
130+
left = right - 1;
131+
} else if (arr[right] == arr[right - 1]) {
132+
status = -1;
133+
ans = Math.max(right - left, ans);
134+
left = right;
135+
}
136+
}
137+
}
138+
if (status == 2) {
139+
ans = Math.max(ans, right - left);
140+
}
141+
return ans;
142+
}
143+
}
79144
```
80145

81146
### **...**

solution/0800-0899/0845.Longest Mountain in Array/README_EN.md

+67-2
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,78 @@
5858
### **Python3**
5959

6060
```python
61-
61+
class Solution:
62+
def longestMountain(self, arr: List[int]) -> int:
63+
left, right = 0, 1
64+
status = -1
65+
ans = 0
66+
while right < len(arr):
67+
if status == -1 or status == 1:
68+
if arr[right] == arr[right - 1]:
69+
status = -1
70+
if status == -1:
71+
if arr[right] > arr[right - 1]:
72+
status = 1
73+
else:
74+
left = right
75+
if status == 1 and arr[right] < arr[right - 1]:
76+
status = 2
77+
else:
78+
if arr[right] == arr[right - 1]:
79+
status = -1
80+
ans = max(ans, right - left)
81+
left = right
82+
elif arr[right] > arr[right - 1]:
83+
status = 1
84+
ans = max(ans, right - left)
85+
left = right - 1
86+
right += 1
87+
if status == 2:
88+
ans = max(right - left, ans)
89+
return ans
6290
```
6391

6492
### **Java**
6593

6694
```java
67-
95+
class Solution {
96+
public int longestMountain(int[] arr) {
97+
int left = 0, right = 0;
98+
int ans = 0;
99+
int status = -1;
100+
while (++right < arr.length) {
101+
if (status == -1 || status == 1) {
102+
if (arr[right] == arr[right - 1]) {
103+
status = -1;
104+
}
105+
if (status == -1) {
106+
if (arr[right] > arr[right - 1]) {
107+
status = 1;
108+
} else {
109+
left = right;
110+
}
111+
}
112+
if (status == 1 && arr[right] < arr[right - 1]) {
113+
status = 2;
114+
}
115+
} else {
116+
if (arr[right] > arr[right - 1]) {
117+
status = 1;
118+
ans = Math.max(right - left, ans);
119+
left = right - 1;
120+
} else if (arr[right] == arr[right - 1]) {
121+
status = -1;
122+
ans = Math.max(right - left, ans);
123+
left = right;
124+
}
125+
}
126+
}
127+
if (status == 2) {
128+
ans = Math.max(ans, right - left);
129+
}
130+
return ans;
131+
}
132+
}
68133
```
69134

70135
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
public int longestMountain(int[] arr) {
3+
int left = 0, right = 0;
4+
int ans = 0;
5+
int status = -1;
6+
while (++right < arr.length) {
7+
if (status == -1 || status == 1) {
8+
if (arr[right] == arr[right - 1]) {
9+
status = -1;
10+
}
11+
if (status == -1) {
12+
if (arr[right] > arr[right - 1]) {
13+
status = 1;
14+
} else {
15+
left = right;
16+
}
17+
}
18+
if (status == 1 && arr[right] < arr[right - 1]) {
19+
status = 2;
20+
}
21+
} else {
22+
if (arr[right] > arr[right - 1]) {
23+
status = 1;
24+
ans = Math.max(right - left, ans);
25+
left = right - 1;
26+
} else if (arr[right] == arr[right - 1]) {
27+
status = -1;
28+
ans = Math.max(right - left, ans);
29+
left = right;
30+
}
31+
}
32+
}
33+
if (status == 2) {
34+
ans = Math.max(ans, right - left);
35+
}
36+
return ans;
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution:
2+
def longestMountain(self, arr: List[int]) -> int:
3+
left, right = 0, 1
4+
status = -1
5+
ans = 0
6+
while right < len(arr):
7+
if status == -1 or status == 1:
8+
if arr[right] == arr[right - 1]:
9+
status = -1
10+
if status == -1:
11+
if arr[right] > arr[right - 1]:
12+
status = 1
13+
else:
14+
left = right
15+
if status == 1 and arr[right] < arr[right - 1]:
16+
status = 2
17+
else:
18+
if arr[right] == arr[right - 1]:
19+
status = -1
20+
ans = max(ans, right - left)
21+
left = right
22+
elif arr[right] > arr[right - 1]:
23+
status = 1
24+
ans = max(ans, right - left)
25+
left = right - 1
26+
right += 1
27+
if status == 2:
28+
ans = max(right - left, ans)
29+
return ans

0 commit comments

Comments
 (0)