Loading

有效的山脉数组

1.问题描述

给定一个整数数组 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

提示:

  1. 0 <= A.length <= 10000
  2. 0 <= A[i] <= 10000

2.求解

线性扫描

  • 遍历数组,判断数组是否是先上升再下降的一个数组

代码如下

/*
 * 执行用时:1 ms, 在所有 Java 提交中击败了100.00% 的用户
 * 内存消耗:39.5 MB, 在所有 Java 提交中击败了71.46% 的用户
 * */
public boolean validMountainArray(int[] A) {
    if(A == null || A.length < 3){
        return false;
    }
    int i = 0;
    //找到第一个转折点
    while(i < A.length - 1 && A[i] < A[i + 1]){
        i++;
    }
    //判断是否是最后一位、第一位或者相等情况
    if(i == A.length - 1 || i == 0 || A[i] == A[i + 1]){
        return false;
    }
    //判断之后是否一直为下坡
    while(i < A.length - 1 && A[i] > A[i + 1]){
        i++;
    }
    return i == A.length - 1;
}
  • 时间复杂度: O(n)
  • 空间复杂度:O(1)
posted @ 2020-11-03 18:49  水纸杯  阅读(289)  评论(0)    收藏  举报