有效的山脉数组

LeetCode每日一题,941. Valid Mountain Array

先看题目描述

BsD4OS.png

大意就是给定一个数组,让我们判断其是否为山脉数组,山脉数组的定义为数组 A 的长度大于等于 3,且存在一个 i 使得 A[0] < A[1] < … < A[i],A[i] > A[i+1] > … > A[A.length - 1]

算法和思路

线性扫描

按题意模拟即可。我们从数组的最左侧开始向右扫描,直到找到第一个不满足 A[i] < A[i+1] 的下标 i,那么 i 就是这个数组的最高点的下标。如果 i=0 或者不存在这样的 i(即整个数组都是单调递增的),那么就返回 false。否则从 i 开始继续向右扫描,判断接下来的的下标 j 是否都满足 A[j] > A[j+1],若都满足就返回 true,否则返回 false

算法源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public boolean validMountainArray(int[] A) {
int len = A.length;
if (len < 3) return false;
int index = 0;
while (index < len - 1 && A[index] < A[index + 1]) {
index++;
}
if (index == len - 1 || index == 0) return false;
while (index < len - 1 && A[index] > A[index + 1]) {
index++;
}
return index == len - 1;
}
}