• 力扣每日一题:有效的山脉数组


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

    通过做这个题了解的知识点:
    1.vector的size()函数返回的是一个无符号整数,所以A.size()-1越界,是一个很大的数。 所以要用它的时候,最好是预先定义一个int型变量存储一下,即:

    int n = A.size() - 1;
    

    2.vector容器的首地址是 A.begin() , 尾地址是 A.end() , 而不是跟数组一样写数组名和数组名 + n ,n是数组元素个数

    3.upper_bound()和lower_bound()函数的使用前提是数组或者vector A是有序的。他们有三个参数,其使用手法为:

    lower_bound(A.begin() , A.end() , x) - A ;  //在整个vector容器中查找第一个大于等于x的数的下标
    lower_bound(A , A + n , x) - A ;  //在整个数组中查找第一个大于等于x的数的下标,n是数组元素个数
    
    upper_bound(A.begin() , A.end() , x) - A ;  //在整个vector容器中查找第一个大于x的数的下标
    upper_bound(A , A + n , x) - A ;  //在整个数组中查找第一个大于x的数的下标,n是数组元素个数
    
    

    思路:
    1.首先,数组元素个数小于3,则不是有效的。
    2.如果有相邻元素相等的情况出现,则不是有效的。
    3.这道题数据范围比较小,在这次直接遍历数组,找到第一个A[i] > A[i + 1]的情况,此时的i即为最大值的下标。
    4.如果i是0或者A.size() - 1 , 即数组是单调递增或者单调递减的, 则不是有效的。
    5.从最大值下标开始继续向后遍历数组,如果出现A[i] < A[i + 1] ,即元素递增情况 , 则不是有效的。
    6.所有无效情况都不满足,即为有效的。

    AC代码:

    class Solution {
    public:
        bool validMountainArray(vector<int>& A) {
            int n = A.size() ;
            int x;
            if(n < 3) return false;
            for(int i = 0 ; i < n - 1 ; i ++){
                if(A[i] == A[i + 1]) return false;
            }
            for(int i = 0 ; i < n - 1 ; i ++){
                if(A[i] > A[i + 1]){
                    x = i;
                    break;
                }
            }
            if(x == n - 1 || x == 0) return false;
            for(int i = x ; i < n - 1 ; i ++){
                if(A[i] < A[i + 1]) return false;
            }
            return true;
        }
    };
    
  • 相关阅读:
    Makefile编写
    C++静态库与动态库
    C语言编译过程详解
    Fiddler抓HTTPS
    web测试的一些关注点
    Appium使用过程中的一些坑
    Jmeter+Maven+Jenkins的搭建笔记
    华为DHCP+VLANDHCP RELAY配置重点
    华为GVRP配置重点
    802.11协议总结
  • 原文地址:https://www.cnblogs.com/ZhaoHaoFei/p/13917973.html
Copyright © 2020-2023  润新知