LeetCode刷题复盘笔记—896. 单调数列

题目:896. 单调数列

题目描述:
如果数组是单调递增或单调递减的,那么它是单调的。
如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[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

一、开始的错误解法

class Solution {
public:
    bool isMonotonic(vector<int>& A) {
        if(A[1]>=A[0]){
            for(int i=2;i<A.size();++i){
                if(A[i]<A[i-1]) return false;
            }
        }
        else{
            for(int j=2;j<A.size();++j){
                if(A[j]>A[j-1]) return false;
            }
        }
        return true;

    }
};

错误原因:对于测试用例[1,1,0]返回false,代码有漏洞,鲁棒性太差

二、正确解法

方法一:两次遍历
遍历两次数组,分别判断其是否为单调递增或单调递减。

C++版本:

class Solution {
public:
    bool isMonotonic(vector<int>& A) {
       return is_sorted(A.begin(),A.end()) ||is_sorted(A.rbegin(),A.rend());
    }
};

Python版本:

class Solution(object):
    def isMonotonic(self, A):
        return A == sorted(A) or A == sorted(A, reverse = True)

方法二:一次遍历
遍历数组 A,若既遇到了 A[i]>A[i+1]又遇到了 A[i’]<A[i’+1]则说明 A既不是单调递增的,也不是单调递减的。

C++版本:

class Solution {
public:
    bool isMonotonic(vector<int>& A) {
    //    return is_sorted(A.begin(),A.end()) ||is_sorted(A.rbegin(),A.rend());
        bool inc=true,dec=true;
        for(int i=0;i<A.size()-1;++i){
            if(A[i+1]>A[i]) dec=false;
            if(A[i+1]<A[i]) inc=false;
        }
        return inc||dec;
    }
};

Python版本:

class Solution(object):
    def isMonotonic(self, A):
        inc=True
        dec=True
        for i in range(len(A)-1):
            if A[i+1]>A[i]:
                dec=False
            if A[i+1]<A[i]:
                inc=False
        return inc or dec        

总结

C++
is_sorted()此函数专门用于判断某个序列是否为有序序列。有序返回true,无序返回false
注:在使用该函数之前,程序中必须先引入此头文件:

 #include <algorithm>

Python

常用运算符总结:
在这里插入图片描述
注:
(1)C++中 && 和 || 运算符分别对应Python的 and 和 or
(2)Python //运算符是除后商值向下取整的作用

例如:
				9//4 结果为2 

欢迎大家扫码关注本人公众号:编程复盘与思考随笔

(关注后可以免费获得本人在csdn发布的资源源码)

公众号主要记录编程和刷题时的总结复盘笔记和心得!并且分享读书、工作、生活中的一些思考感悟!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Al资料站与复盘笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值