• leetcode-896-单调数列


    题目描述:

    如果数组是单调递增或单调递减的,那么它是单调的

    如果对于所有 i <= jA[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= jA[i]> = A[j],那么数组 A 是单调递减的。

    当给定的数组 A 是单调数组时返回 true,否则返回 false

     

    示例 1:

    输入:[1,2,2,3]
    输出:true
    

    示例 2:

    输入:[6,5,4,4]
    输出:true
    

    示例 3:

    输入:[1,3,2]
    输出:false
    

    示例 4:

    输入:[1,2,4,5]
    输出:true
    

    示例 5:

    输入:[1,1,1]
    输出:true
    

     

    提示:

    1. 1 <= A.length <= 50000
    2. -100000 <= A[i] <= 100000

     

    要完成的函数:

    bool isMonotonic(vector<int>& A) 

    说明:

    1、这道题给定一个vector,长度大于等于1,存储的是int类型的数据,要求判断这个vector是不是单调的(可以等于)。

    如果是单调的,返回true,如果不是,返回false。

    2、这道题不会很难,把一些边界情况考虑一下,也就差不多能解决了~

    首先如果vector只有一个元素或者两个元素,那么必定是单调的。(长度已经规定>=1)

    接着找到第一个跟前面元素不相等的元素,我们通过它来判断如果是单调数组,是单调上升的,还是单调下降的。(如果没有找到这个元素,那么说明整个vector的元素都是完全相等的,那么返回true)

    接着就是在这个元素后面继续遍历了,发现与前面规律不一致的就返回false。

    如果到了末尾都没有返回false,那么返回true。

    代码如下:(附详解)

        bool isMonotonic(vector<int>& A) 
        {
            if(A.size()==1||A.size()==2)return true;//边界情况,这里注意后面是||A.size()==2而不是||2
            int i=1;
            while(i<A.size())//找到第一个跟前面元素不一样的元素
            {
                if(A[i]!=A[i-1])
                    break;
                i++;
            }
            if(i==A.size())return true;//如果到了末尾都没有找到,那么这是一个元素完全相等的vector,返回true
            if(A[i]>A[i-1])//如果这个元素大于前一个,那么应该是单调上升的
            {
                i++;
                while(i<A.size())//一直比较
                {
                    if(A[i]<A[i-1])//发现异常情况,小于前一个元素
                        return false;//返回false
                    i++;
                }
                return true;//一直没有返回false,那么返回true
            }
            else//单调下降的情况,同理
            {
                i++;
                while(i<A.size())
                {
                    if(A[i]>A[i-1])
                        return false;
                    i++;
                }
                return true;
            }
        }

    上述代码实测56ms,beats 98.71% of cpp submissions。

  • 相关阅读:
    [USACO07DEC]观光奶牛Sightseeing Cows
    洛谷 U3348 A2-回文数
    LOJ #2037. 「SHOI2015」脑洞治疗仪
    1441 士兵的数字游戏
    BZOJ 1108: [POI2007]天然气管道Gaz
    P3047 [USACO12FEB]附近的牛Nearby Cows
    POJ 3061 Subsequence
    Hdu 5776 sum
    1052 最大M子段和
    1288 埃及分数
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9606336.html
Copyright © 2020-2023  润新知