力扣 941题 有效的山脉数组 (LeetCode 941. Valid Mountain Array)

一句话解题思路:

 找出数组中的最大值,从最大值处把原数组分为两个数组看待,如果左边数组中有任何一个元素小于或者等于该元素前面的元素,那么就非山脉数组,右边数组同理。

详细解释:

1. 找出边缘或者极端现象:

        如果数组元素个数小于3,那就非山脉数组。

2. 找出数组最大值:

        如果最大值是数组的第一个元素或者最后一个元素,那数组就非山脉数组。

3. 从最大值处把原数组分为两个数组看待:

        左边数组从下标为0开始到原数组最大值的下标止;

        右边数组从原数组最大值下标起,到原数组最后一个元素的下标止。

        创建两个指针,分别遍历左边和右边部分的元素,如果最大值左边有元素大于或等于该元素后面的元素,那么返回false(即原数组非山脉数组),右边部分同理,也就是说如果最大值右边有元素小于或等于该元素后面的元素,那就返回false。

class Solution {
public:
    bool validMountainArray(vector<int>& arr) {
        int max=0;
        int index=0;
        bool flag1=false;
        bool flag2=false;
        //题目要求,数组至少要有三个元素,所以少于3个元素的,返回false
        if(arr.size()<3)
        {
            return false;
        }
        //数组大于三个元素
        //先找出最大数的下标
        for(int i=0;i<arr.size();i++)
        {
            if(arr[i]>max)
            {
                max=arr[i];
                index = i;
            }
        }
        //如果最大值是数组的第一个元素或者最后一个元素,那数组就非山脉数组。
        if(index==0||index==arr.size()-1)
        {
            return false;
        }
        //创建两个指针,分别遍历左边和右边部分的元素
        //如果最大值左边有元素大于或等于该元素后面的元素,那么返回false(即原数组非山脉数组)
        for(int j=0;j<index;j++)//左边数组从下标为0开始到原数组最大值的下标止
        {
            if(arr[j]>=arr[j+1])
            {
                return false;
            }
        }
        //右边数组从原数组最大值下标起,到原数组最后一个元素的下标止
        //如果最大值右边有元素小于或等于该元素后面的元素,那就返回false。
        for(int k=index; k<arr.size()-1;k++)
        {
            if(arr[k]<=arr[k+1])
            {
                return false;
            }
        }
        return true;
    }
};

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值