LeetCode.941 有效的山脉数组

141 阅读1分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

题目描述:

941. 有效的山脉数组 - 力扣(LeetCode) (leetcode-cn.com)

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

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

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

image.png

示例一

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

示例二

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

示例三

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

提示:

  • 1 <= arr.length <= 10^4
  • 0 <= arr[i] <= 10^4

思路分析

遍历

题目还是蛮简单的,和之前刚做过的LeetCode.852 山脉数组的峰顶索引 - 掘金 (juejin.cn)很像。

这一题我们只要遍历2遍即可

先正序找到山峰的位置

然后再逆序找到山峰的位置

然后判断2个位置是否是一个就好了

AC代码

class Solution {
    fun validMountainArray(arr: IntArray): Boolean {
        var l = 0
        var r = arr.size - 1

        while (l + 1 < arr.size && arr[l] < arr[l + 1]) {
            l++
        }

        while (r > 0 && arr[r - 1] > arr[r]) {
            r--
        }

        return l > 0 && r < arr.size - 1 && l == r
    }
}

总结

简单每日一题,祝大家步步高升~

参考

有效的山脉数组 - 有效的山脉数组 - 力扣(LeetCode) (leetcode-cn.com)

941. 有效的山脉数组 - 有效的山脉数组 - 力扣(LeetCode) (leetcode-cn.com)

双指针,左边严格单增,峰顶右边单减,峰顶不能是两边的边值 - 有效的山脉数组 - 力扣(LeetCode) (leetcode-cn.com)