zoukankan      html  css  js  c++  java
  • 有效的山脉数组【941】

    让我们回顾一下,如果 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
    

    提示:

    • 0 <= A.length <= 10000
    • 0 <= A[i] <= 10000

    思路:

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

    代码:

    class Solution {
        public boolean validMountainArray(int[] A) {
            int len = A.length;
            int i = 0;
    
            // 递增扫描
            while(i+1<len && A[i] < A[i+1]){
                i++;
            }
    
            // 最高点不能是数组的第一个位置或最后一个位置
            if(i==0 || i==len-1){
                return false;
            }
             // 递减扫描
             while(i+1<len && A[i] > A[i+1]){
                i++;
            }
            return i==len-1;
        }
    }
    

    复杂度分析

    • 时间复杂度:O(N),其中 N 是数组 A 的长度。

    • 空间复杂度:O(1)。

  • 相关阅读:
    iOS 实现多个按钮,点选一个其它都取消选中状态的最佳方法
    iOS隐藏导航条1px的底部横线
    ios url 编码和解码
    ClassLoader
    Java多线程
    Tomcat8-启动脚本分析
    Cmd
    java命令
    Http报文
    断点续传原理
  • 原文地址:https://www.cnblogs.com/snail-gao/p/13926862.html
Copyright © 2011-2022 走看看