力扣896. 单调数列-C语言实现-简单题

题目

传送门

文本

如果数组是单调递增或单调递减的,那么它是单调的。
如果对于所有 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)

模板

bool isMonotonic(int* A, int ASize){

}

解题

分析

我们要完成的是对于这个数组判断其是否是单调数组,所以我们可以通过数据对比,让数组进行一个判断部分区间的增减状态,如果存在有不同的增减状态就不是单调数组。
所以既然是增减都存在的情况之下就会返回false那么我们可以理解为情况1和情况2
如果检测都第i个元素比第i+1个元素小,那么就是递增,这时候给递减标志打false,如果后面再遇上第i'元素比i'+1元素大,这个小区间就是递减,我们对递增标志打false。当两个标志都是false的时候就返回false,否则都返回true。所以两个标志之间的连接方式用||(或)来连接,这时候只有两个都是false才会返回false。
首先赋值两个标志

bool a=true,b=true;

进行内部循环判断,因为我们需要对于i和i+1进行判断所以我们最后的界限是ASize-1。

for( int i=0;i<ASize;++i){
if(A[i]>A[i+1])a=false;
if(A[i]<A[i+1])b=false;
}

至此对于增减判断一次遍历之后就结束了,我们最后返回也是重点

return a||b;

我们要实现的是对于a=False且b=False的情况返回false,所以只能用||来表达。

False||True=True;
True||True=True;
False||False=False;

完整源码

bool a=true,b=true;
for( int i=0;i<ASize-1;++i){
if(A[i]>A[i+1])a=false;
if(A[i]<A[i+1])b=false;
}
return a||b;

运行结果

力扣896. 单调数列-C语言实现-简单题

上一篇:LeetCode #896. Monotonic Array


下一篇:[LeetCode] 896. Monotonic Array