LeetCode-Valid Mountain Array

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24133491/article/details/88847873

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 with 0 < i < A.length - 1 such that:
    A[0] < A[1] < ... A[i-1] < A[i]
    A[i] > A[i+1] > ... > A[B.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

题意:判断数组A是否存在小标 i i ,使得 A [ 0 ] &lt; A [ 1 ] &lt; . . . A [ i 1 ] &lt; A [ i ] A[0] &lt; A[1] &lt; ... A[i-1] &lt; A[i] A [ i ] &gt; A [ i + 1 ] &gt; . . . &gt; A [ B . l e n g t h 1 ] A[i] &gt; A[i+1] &gt; ... &gt; A[B.length - 1] ;并且 A A 的长度大于或等于3, 0 &lt; i &lt; A . l e n g t h 1 0 &lt; i &lt; A.length - 1

解法:我们只要分别从首尾遍历,找到第一个不满足大小关系的位置后,判断这两个位置是否相同即可,具体流程如下

  1. for st in [0, A.length - 1)
  2. until A[st] > A[st + 1]
  3. for ed in [A.length - 1, 1]
  4. until A[ed] > A[ed - 1]
  5. 比较st与ed是否相同,并且满足st与ed的位置在(0, A.length - 1)
Java
class Solution {
    public boolean validMountainArray(int[] A) {
        if (A.length < 3) {
            return false;
        }
        int st = 0;
        int ed = A.length - 1;
        while (st < A.length - 1 && A[st] < A[st + 1]) {
            st++;
        }
        while (ed > 0 && A[ed] < A[ed - 1]) {
            ed--;
        }
        
        return st == ed && st != 0 && st != A.length - 1 ? true : false;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_24133491/article/details/88847873