941.Valid Mountain Array

941.Valid Mountain Array

题目难度 Easy

给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。 让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组: A.length >= 3 在 0 < i < A.length - 1 条件下,存在 i 使得: A[0] < A[1] < ... A[i-1] < A[i] A[i] > A[i+1] > ... > A[B.length - 1]

示例 1:

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

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

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


提示:

0 <= A.length <= 10000
0 <= A[i] <= 10000

方法:此题与852有些相似,但题目要求是判断是否是山脉数组,而不是找出山脉。

  • 当长度小于3时,直接返回false

  • 从开始和结尾来逐个判断,首先从开始判断,当未到达结尾时,如果碰到前面的数比后面的数大,认为此时是第一个山脉,退出循环。

  • 如果循环退出后,山脉索引到达了结尾,表示最大值在结尾,返回false

  • 同样,从结尾开始判断,如果碰到后面的数比前面的数小,则认为此时是最后一个山脉,退出循环。

  • 如果最后一个山脉索引为0,表示是递减数列,返回false;如果最后一个山脉的索引和第一个山脉的索引值相等,返回true。

class Solution {
public:
    bool validMountainArray(vector<int>& A) {
        size_t As=A.size();
        if(As <3)
            return false;
        int st=0,et=As-1;
        while(st<et)
        {
            if(A[st]>=A[st+1])
                break;
            st++;
        }
        if(st==et) return false;
        while(et>st)
        {
            if(A[et]>=A[et-1])
                break;
            et--;
        }
        return st==et && st ;

    }
};

Last updated