Valid Mountain Array

https://leetcode.com/explore/featured/card/fun-with-arrays/527/searching-for-items-in-an-array/3251/

这是我想到的最直接的方法,但问题是要走Array两遍,max 本身就走了一遍。

class Solution:
    def validMountainArray(self, A: List[int]) -> bool:
        if len(A) == 0:
            return False
        idx = A.index(max(A))
        if idx == 0 or idx == len(A)-1:
            return False
        for i in range(idx):
            if A[i] >= A[i+1]:
                return False
        
        for j in range(idx,len(A)-1):
            if A[j] <= A[j+1]:
                return False
        return True
            
        

下面这个two pointer分别从左爬上坡和右爬上坡的解法最后判定两个指针i,j是否到达同一位置。

这个就是One-pass更优。

class Solution:
    def validMountainArray(self, A: List[int]) -> bool:
        if len(A) == 0:
            return False
        i = 0
        while i < len(A)-1 and A[i] < A[i+1]:
                i+=1
        
        j = len(A)-1
        while j > 0 and A[j-1] > A[j]:
                j-=1
        return 0 < i == j < len(A) - 1

Last updated

Was this helpful?