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