leetcode--941.有效的山脉

本文介绍了一种用于验证数组是否符合山脉数组特性的算法。通过遍历数组找到峰值,并检查峰值左侧和右侧元素是否严格递增和递减,以此判断数组是否为山脉数组。文章提供了详细的逻辑步骤和Java实现代码。

问题描述:
在这里插入图片描述
示例1.

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

示例2.

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

示例3.

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

思路:

1.)先for循环遍历整个数组,找出第一个数字以及角标i,这个数字满足,A[i]>A[i-1]&&A[i]>A[i+1].
2.)定义一个boolean类型的变量flag,初始值为true
3.)左右各进行两个for循环
左边的for循环角标left从0开始小于i,如果存在一个A[left]>=A[left+1],令flag=false.并break出循环.
如果左边for循环的flag值为true的话再进行右边的for循环,右边的for循环角标right从A.length-1开始大于i,如果存在一个A[right-1]<=A[right],令flag=false.并break出循环
最后返回flag就行.此时flag的值就是该数组是否是"山脉数组"

java代码

class Solution {
    public boolean validMountainArray(int[] A) {
        if(A.length==0||A.length==1||A.length==2){
            return false;
        }
        int k=0;
        for(int i=1;i<A.length-1;i++){
            if(A[i]>A[i-1]&&A[i]>A[i+1]){
                k=i;
                break;
            } 
        }
        if(k==0){
            return false;
        }
        boolean flag=true;
        for(int left=0;left<k;left++){
            if(A[left]>=A[left+1]){
                flag=false;
                break;
            }
        }
        if(flag==true){
            for(int right=A.length-1;right>k;right--){
                if(A[right-1]<=A[right]){
                    flag=false;
                    break;
                }
            }
        }
        return flag;
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值