簡體   English   中英

Leetcode 問題 #845 陣列中最長的山

[英]Leetcode question #845 Longest Mountain in Array

這是我的代碼:

    def longestMountain(self, A: List[int]) -> int:
        i=1
        list=[]
        if len(A)<3:
            return 0
        if (len(A)==3 and A[0]>=A[1] and A[1]<=A[2]):
            return 0
        while i < len(A):
            count=1
            if A[i]<=A[i-1]:
                i+=1
            while (i< len(A) and A[i]>A[i-1]):
                count+=1
                i+=1
            if count==1 or count==len(A):
                return 0
            while (i< len(A) and A[i]<A[i-1]):
                count+=1
                i+=1
            list.append(count)
        return max(list)

在測試 A=[0,1,0,2,2] 的情況時,預期結果為 3,但輸出為 0。有人可以檢查我的代碼嗎?

這是 leetcode 問題:如果以下屬性成立,我們將任何(連續的)子數組 B(A)稱為山:

B.length >= 3 存在一些 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1 ] > ... > B[B.length - 1] (注意 B 可以是 A 的任何子數組,包括整個數組 A。)

給定一個整數數組 A,返回最長山的長度。

如果沒有山,則返回 0。

示例 1:

輸入:[2,1,4,7,3,2,5] 輸出:5 解釋:最大的山是 [1,4,7,3,2],長度為 5。例 2:

輸入:[2,2,2] 輸出:0 解釋:沒有山。

我們可以計算起伏並使用max()

class Solution:
    def longestMountain(self, nums):
        longest = 0
        up = down = 0
        for i in range(1, len(nums)):
            if down and nums[i - 1] < nums[i] or nums[i - 1] == nums[i]:
                up = down = 0

            up += nums[i - 1] < nums[i]
            down += nums[i - 1] > nums[i]

            if up and down:
                longest = max(longest, up + down + 1)

        return longest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM