题目: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
提示
- 1 <= A.length <= 50000
- -100000 <= A[i] <= 100000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/monotonic-array/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
根据题意,需要检测一个数列是否为单调数列,那么反过来,只要一个数列即有递增又有递减,那么它肯定不是单调数列。
解题代码
(1)一次遍历
class Solution {
public:
bool isMonotonic(vector<int>& A) {
bool inc = true, dec = true;
int n = A.size();
for(int i = 0; i < n - 1; i++)
{
if(A[i] > A[i+1])//不满足递增数组
inc = false;
if(A[i] < A[i+1])//不满足递减数组
dec = false;
}
return inc || dec;//有一个满足即为true
}
};
(2)两次遍历
class Solution {
public:
bool isMonotonic(vector<int>& A) {
//判断一次升序、一次降序
return is_sorted(A.begin(), A.end()) || is_sorted(A.rbegin(), A.rend());
}
};
解题感悟
解题的时候反向思维有时候能够轻松地做出结果,举出反例总比穷举一切正面例子简单。。。