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

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

    提示:

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

    线性扫描:

    然后就很傻的办法,从前往后遍历,一开始升然后降(第13行一开始写的 < A.length - 3 后来改成 < A.length - 2都是错的)

     1 class Solution {
     2     public boolean validMountainArray(int[] A) {
     3         boolean res = true;
     4         if (A == null || A.length < 3) {
     5             return false;
     6         }
     7         if (A[0] >= A[1]) {
     8             return false;
     9         }
    10        
    11         boolean flag = true; // true是小于
    12         int m = 0;
    13         for (int i = 1; i < A.length - 1; i++) {
    14             if (A[i] == A[i+1]) {
    15                 return false;
    16             }
    17             flag = A[i] < A[i+1] ? true : false;
    18             // 开始下坡
    19             if (!flag) {
    20                 m = i + 1;
    21                 break;
    22             }
    23         }
    24         if (m == 0) return false; 
    25         boolean temp = true;
    26         for (int j = m; j < A.length - 1; j++) {
    27             temp = A[j] > A[j+1] ? true : false;
    28             if (!temp) {
    29                 return false;
    30             }
    31         }
    32                 
    33         return res;
    34     }
    35 }

     下面是看大佬们的代码写出来的,双指针,简介明了!!!

    class Solution {
        public boolean validMountainArray(int[] A) {
            if (A == null || A.length < 3) return false;
    
            int left = 0;
            int right = A.length - 1;
    
            while(left < A.length - 2 && A[left] < A[left + 1])
                left++;
            while(right > 1 && A[right] < A[right - 1])
                right--;
                
            return left == right;
        }
    }
    越努力越幸运~ 加油ヾ(◍°∇°◍)ノ゙
  • 相关阅读:
    GUI 之 JDialog弹窗
    GUI Swing 之 JFrame窗体
    GUI 键盘监听事件
    GUI 窗口监听事件
    GUI 鼠标监听事件,模拟画图工具
    shell编程
    Ubuntu20.04 Linux初识
    rlwrap的使用
    5个相见恨晚的Linux命令,每一个都非常实用
    Bash初识与常用命令
  • 原文地址:https://www.cnblogs.com/utomboy/p/12842371.html
Copyright © 2011-2022 走看看