image.png
image.png

思路

这题让判断一个数组是否是有效山峰数组,所谓有效山峰数组就是在数组中有且仅有一个最大值,并且最大值往前走是降序的,往后走也是降序的。

一种简单的解决方式就是使用两个变量left和right,我们也可以把它看做是两个指针,left从数组的前面开始,如果是升序的就一直找,直到遇到降序的时候停止,right从数组后面往前找,如果是升序的就一直找,直到遇到降序的时候停止。然后再判断left和right是否相等。如下图所示

有效的山脉数组 - 图3

  1. def validMountainArray(A):
  2. length = len(A)
  3. left, right = 0, len - 1
  4. # 从左往右找,一直找到山峰为止
  5. while left + 1 < length and A[left] < A[left + 1]:
  6. left += 1
  7. # 从右往左找,一直找到山峰为止
  8. while right - 1 > 0 and A[right - 1] > A[right}]:
  9. right -= 1
  10. # 判断从左边到右边找的山峰是不是同一个
  11. return left > 0 and right < length - 1 and left == right

从一边开始找,找到山峰之后再往右边下山,如果能走到数组的最后一个元素,说明是有效山峰。

  1. def validMountainArray(A):
  2. length = len(A)
  3. left = 0
  4. # 从左边往右边找,一直找到山峰为止
  5. while left + 1 < length and A[left] < A[left + 1]:
  6. left += 1
  7. if left == 0 or left == length - 1:
  8. return False
  9. # 找到山峰后,下山
  10. while left + 1 < length and A[left] > A[left + 1]:
  11. left += 1
  12. return left == length - 1