0941. 有效的山脉数组
大约 2 分钟
--- 
0941. 有效的山脉数组
- 标签:数组
- 难度:简单
题目链接
题目大意
描述:
如果 满足下述条件,那么它是一个山脉数组:
- 在 0 < i < arr.length - 1$ 条件下,存在 使得:

给定一个整数数组 。
要求:
如果 是有效的山脉数组就返回 true,否则返回 false。
说明:
- 。
- 。
示例:
- 示例 1:
输入:arr = [2,1]
输出:false- 示例 2:
输入:arr = [3,5,5]
输出:false解题思路
思路 1:双指针
使用双指针分别从左右两端向中间移动,找到山峰位置。
- 如果数组长度小于 ,直接返回 。
- 使用指针 从左向右移动,找到第一个不再递增的位置。
- 使用指针 从右向左移动,找到第一个不再递减的位置。
- 检查 和 是否相等,且不在数组的两端(必须有上升和下降部分)。
思路 1:代码
class Solution:
def validMountainArray(self, arr: List[int]) -> bool:
n = len(arr)
# 长度小于 3,不可能是山脉数组
if n < 3:
return False
left = 0
# 从左向右找到山峰
while left < n - 1 and arr[left] < arr[left + 1]:
left += 1
# 山峰不能在两端
if left == 0 or left == n - 1:
return False
# 从山峰向右检查是否递减
while left < n - 1 and arr[left] > arr[left + 1]:
left += 1
# 如果到达数组末尾,说明是有效的山脉数组
return left == n - 1思路 1:复杂度分析
- 时间复杂度:,其中 是数组 的长度。
- 空间复杂度:,只使用了常数级别的额外空间。