Skip to content

Latest commit

 

History

History
52 lines (38 loc) · 1.25 KB

845.-longest-mountain-in-array.md

File metadata and controls

52 lines (38 loc) · 1.25 KB

845. Longest Mountain in Array

{% 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 %}