941. 有效的山脉数组
给定一个整数数组 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[A.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
分析:要想是山脉数组,数组必须先增后减;那么首先就要判断什么时候开始减?加入从角标为i的元素开始减,那么就要判断i后面的元素是否一直在减?若能够判断到最后一个元素还在减,那么久说明是山脉数组,否则就不是。
代码如下:
class Solution {
public boolean validMountainArray(int[] A) {
int N = A.length;//定义数组长度
int i = 0;
while (i+1 < N && A[i] < A[i+1])//找到数组开始减的角标
i++;
if (i == 0 || i == N-1)//如果i==0;说明数组只有一个元素,不可能是山脉数组,返回false
return false; //如果i==N-1;说明到最后一个元素还没有开始减,不是山脉数组,返回false
while (i+1 < N && A[i] > A[i+1] )
i++;
return i == N-1; //如果能判断到N-1处且条件成立,则说明是山脉数组
}
}
运行结果:
一旦遇到相等就一定不是山脉数组。