「这是我参与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]
示例一
输入: arr = [2,1]
输出: false
示例二
输入: arr = [3,5,5]
输出: false
示例三
输入: arr = [0,3,2,1]
输出: true
提示:
1 <= arr.length <= 10^40 <= 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)