思路
这题让判断一个数组是否是有效山峰数组,所谓有效山峰数组就是在数组中有且仅有一个最大值,并且最大值往前走是降序的,往后走也是降序的。
一种简单的解决方式就是使用两个变量left和right,我们也可以把它看做是两个指针,left从数组的前面开始,如果是升序的就一直找,直到遇到降序的时候停止,right从数组后面往前找,如果是升序的就一直找,直到遇到降序的时候停止。然后再判断left和right是否相等。如下图所示
def validMountainArray(A):
length = len(A)
left, right = 0, len - 1
# 从左往右找,一直找到山峰为止
while left + 1 < length and A[left] < A[left + 1]:
left += 1
# 从右往左找,一直找到山峰为止
while right - 1 > 0 and A[right - 1] > A[right}]:
right -= 1
# 判断从左边到右边找的山峰是不是同一个
return left > 0 and right < length - 1 and left == right
从一边开始找,找到山峰之后再往右边下山,如果能走到数组的最后一个元素,说明是有效山峰。
def validMountainArray(A):
length = len(A)
left = 0
# 从左边往右边找,一直找到山峰为止
while left + 1 < length and A[left] < A[left + 1]:
left += 1
if left == 0 or left == length - 1:
return False
# 找到山峰后,下山
while left + 1 < length and A[left] > A[left + 1]:
left += 1
return left == length - 1