题目: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发布的资源源码)
公众号主要记录编程和刷题时的总结复盘笔记和心得!并且分享读书、工作、生活中的一些思考感悟!