力扣896. 單調數列-C語言實現-簡單題

清瀨灰二發表於2021-02-28

題目

傳送門

文字

如果陣列是單調遞增或單調遞減的,那麼它是單調的。
如果對於所有 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;

執行結果

在這裡插入圖片描述

相關文章