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?