每日一题之20201103(941. 有效的山脉数组)

简介: 首先要弄清楚题目的意图,曾经在字节面试遇到过类似的题目,但那题是需要找出这个峰值。所以解法也肯定不一样。官方给的题解是直接遍历,我们这里采用双指针分别从头和尾往中间遍历,如果山脉符合要求,那么2个指针会停在同一个山脉。
首先要弄清楚题目的意图,曾经在字节面试遇到过类似的题目,但那题是需要找出这个峰值。

所以解法也肯定不一样。

官方给的题解是直接遍历,我们这里采用双指针分别从头和尾往中间遍历,如果山脉符合要求,那么2个指针会停在同一个山脉


class Solution:
    def validMountainArray(self, A: List[int]) -> bool:
        start, end = 0, len(A)-1
        # 保证start在正常范围并且左边的值小于右边, 循环如果退出,那么左侧的
        # 峰值也就找到了
        while start < len(A)-1 and A[start] < A[start+1]:
            start += 1
        # 右侧同理,保证左值大于右值
        while end > 0 and A[end-1] > A[end] :
            end -= 1
        # 这里需要注意的是,start可能和end在0索引处相遇,比如[2, 1]
        # 所以需要保证他们不在数组两端相遇
        # 如果数组为[] start != end 会返回False
        return start == end and 0 < start < len(A)-1

9.jpg

777.jpg




相关文章
|
5天前
leetcode-941:有效的山脉数组
leetcode-941:有效的山脉数组
23 0
|
5天前
|
人工智能
【力扣每日一题/03】941. 有效的山脉数组
【力扣每日一题/03】941. 有效的山脉数组
|
5天前
|
Java
每日一题《剑指offer》数组篇之和为S的两个数字
每日一题《剑指offer》数组篇之和为S的两个数字
30 0
每日一题《剑指offer》数组篇之和为S的两个数字
|
5天前
|
Java
每日一题《剑指offer》数组篇之数组中只出现一次的两个数字
每日一题《剑指offer》数组篇之数组中只出现一次的两个数字
16 0
每日一题《剑指offer》数组篇之数组中只出现一次的两个数字
|
5天前
|
Java
每日一题《剑指offer》数组篇之数组中的逆序对
每日一题《剑指offer》数组篇之数组中的逆序对
29 0
每日一题《剑指offer》数组篇之数组中的逆序对
|
5天前
|
Java
每日一刷《剑指offer》字符串篇之左旋转字符串
每日一刷《剑指offer》字符串篇之左旋转字符串
41 0
每日一刷《剑指offer》字符串篇之左旋转字符串
|
5天前
|
人工智能 Java
每日一题《剑指offer》数组篇之连续子数组的最大和
每日一题《剑指offer》数组篇之连续子数组的最大和
39 0
每日一题《剑指offer》数组篇之连续子数组的最大和
|
10月前
《蓝桥杯每日一题》差分·Acwing3729. 改变数组元素
《蓝桥杯每日一题》差分·Acwing3729. 改变数组元素
33 0
《蓝桥杯每日一题》差分·Acwing3729. 改变数组元素
|
11月前
|
Python
数组最值之谜
数组最值之谜
30 0
|
11月前
|
算法
编程之美 -2.17数组循环移位
编程之美 -2.17数组循环移位
49 0