leetocode 941 python

941. 有效的山脉数组


难度 简单 | 标签 数组


Description

给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false

让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:

  • A.length >= 3
  • 在 0 < i < A.length - 1 条件下,存在 i 使得:
    • A[0] < A[1] < ... A[i-1] < A[i]
    • A[i] > A[i+1] > ... > A[A.length - 1]

 

 

示例 1:

输入:[2,1]
输出:false

示例 2:

输入:[3,5,5]
输出:false

示例 3:

输入:[0,3,2,1]
输出:true

 

提示:

  1. 0 <= A.length <= 10000
  2. 0 <= A[i] <= 10000 

 

 

My Solution

class Solution:
    def validMountainArray(self, arr: List[int]) -> bool:
        if len(arr)<3:
            return False
 
        up = True
        for i in range(1,len(arr)):
            if arr[i] < arr[i-1]:
                # 注意一定要有上坡
                if i == 1:
                    return False
                up = False
            elif arr[i] == arr[i-1]:
                return False
            else:
                if up == False:
                    return False
        # 注意一定要有下坡
        if up == False:
            return True
        return False

参考解法:

解题思路:双指针

数组长度>=3,从左边由小到大遍历,从右边由大到小遍历,如果它们的峰值只有一个,并且不在数组端点上,则满足是山坡的条件。

class Solution:
    def validMountainArray(self, arr: List[int]) -> bool:
        left = 0
        right = len(arr)-1
        
        while left<len(arr)-1 and arr[left]<arr[left+1]:
            left+=1
        while right>0 and arr[right]<arr[right-1]:
            right-=1
        if left==right and left!=0 and right!=len(arr)-1:
            return True
        return False
posted @ 2021-01-27 16:57  文学是可爱的  阅读(126)  评论(0)    收藏  举报