给定一个整数数组 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
思路:
* 找出山脉峰顶最大值
* 两两对比左右两侧山脉是否符合条件,不符合返回false
代码:
public boolean validMountainArray(int[] A) {
if(A.length==0)return false;//判断空值情况
int max = A[0];
int flag = 0;
for (int i = 1; i < A.length; i++) {
if(max < A[i]) {
max = A[i];//记录第一个出现的山脉峰顶值
flag = i; //记录第一个出现的山脉峰顶位置
}
}
if(flag==0 || flag==A.length-1)return false;//判断峰顶位置是否为边界位置,是的话则不是山脉
//左侧峰判断
for (int i = 0; i <= flag-1; i++) {
if(A[i] > A[i+1]) return false;
}
//右侧峰判断
for (int i = flag; i < A.length-1; i++) {
if(A[i] < A[i+1] || A[i] == A[i+1]) return false;
}
return true;
}