{% tabs %} {% tab title="one pass" %}
class Solution:
def longestMountain(self, A: List[int]) -> int:
up = down = res = 0## 明白什么时候更新重置
for i in range(1, len(A)):
if (down > 0 and A[i-1] <= A[i]) or A[i-1] == A[i] :
up = down = 0
if A[i-1] < A[i]:
up += 1
if A[ i- 1] > A[i]:
down += 1
if up and down : res = max(res, up + down + 1)
return res
{% endtab %}
{% tab title="很Python" %}
class Solution:
def longestMountain(self, A: List[int]) -> int:
if len(A) < 3: return 0
## dp[i][0] 前边比自己小的,dp[i][1]后面比自己小的
dp = [[1] * 2 for _ in range(len(A))]
# dp[i][0] = dp[i-1][0]
for i in range(1, len(A)):
if A[i] > A[i-1]:
dp[i][0] = max(dp[i-1][0] + 1,dp[i][0])
for i in range(len(A)-2,-1,-1):
if A[i] > A[i + 1]:
dp[i][1] = max(dp[i + 1][1] + 1,dp[i][1])
# print(dp)
ans = max([sum(dp[i]) - 1 for i in range(len(dp)) if min(dp[i]) > 1] + [0])
return 0 if ans <= 2 else ans
{% endtab %} {% endtabs %}