Valid Mountain Array
Description
Given an array A
of integers, return true
if and only if it is a valid mountain array.
Recall that A is a mountain array if and only if:
A.length >= 3
There exists some
i
with0 < i < A.length - 1
such that:A[0] < A[1] < ... A[i-1] < A[i]
A[i] > A[i+1] > ... > A[A.length - 1]

Example 1:
Input: [2,1]
Output: false
Example 2:
Input: [3,5,5]
Output: false
Example 3:
Input: [0,3,2,1]
Output: true
Note:
0 <= A.length <= 10000
0 <= A[i] <= 10000
Code
public boolean validMountainArray(int[] A) {
// 数组长度小于3返回false
if (A.length < 3) {
return false;
}
// flag代表该阶段是上升(0)还是下降(1)
int flag = A[1] - A[0] > 0 ? 0 : 1;
// 初始不上升则返回false
if (flag != 0) {
return false;
}
for (int i = 1; i < A.length; i++) {
int t = A[i] - A[i - 1];
// 两个值相等返回false
if (t == 0) {
return false;
}
// 首次出现下降时将flag的值置为1
if (flag == 0 && t < 0) {
flag = 1;
}
// 出现先升后降再升的情况返回false
if (t > 0 && flag == 1) {
return false;
}
}
// 若flag最后不等于1,说明没有下降过
return flag == 1;
}
Last updated
Was this helpful?