题目难度 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 <= 100000 <= 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 ;}};