【刷题笔记】941. 有效的山脉数组

88 阅读1分钟

Offer 驾到,掘友接招!我正在参与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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

二、思路分析:

从题意可知,一直往上到顶点再一直往下的这种折线图形才能称为山峰 所以我们也可以理解为变化的趋势只改变一次,即只跳变一次 如果跳变多次,那count肯定大于1,那么就不是山峰型 且如果A[i]==A[i+1]也不对,遇到这种情况直接返回false

三、AC 代码:

class Solution {
    public boolean validMountainArray(int[] A) {
        if(A.length<3) return false;
        int count=0;
        if(A[0]>A[1]) return false;//首先检查初始趋势是否为上升
        //如果没有这条语句[2,1]也会判定为对,因为他也只跳变一次
        for(int i=0;i<A.length-1;i++){
            if(A[i]==A[i+1]) return false;
            if(count==0&&A[i]>A[i+1]){
                count++;
            }
            if(count==1&&A[i]<A[i+1]){
                count++;
            }
        }
        return count==1;

    }
}

参考

用时击败96.67% 双指针夹心 - 有效的山脉数组 - 力扣(LeetCode) (leetcode-cn.com)