給定乙個整數陣列 a,如果它是有效的山脈陣列就返回 true,否則返回 false。
讓我們回顧一下,如果 a 滿足下述條件,那麼它是乙個山脈陣列:
a.length >= 3
在 0 < i < a.length - 1 條件下,存在 i 使得:
示例 1:
輸入:[2,1]
輸出:false
示例 2:
輸入:[3,5,5]
輸出:false
示例 3:
輸入:[0,3,2,1]
輸出:true
0 <= a.length <= 10000
0 <= a[i] <= 10000
通過做這個題了解的知識點:
1.vector的size()函式返回的是乙個無符號整數,所以a.size()-1越界,是乙個很大的數。 所以要用它的時候,最好是預先定義乙個int型變數儲存一下,即:
int n = a.size() - 1;
2.vector容器的首位址是 a.begin() , 尾位址是 a.end() , 而不是跟陣列一樣寫陣列名和陣列名 + n ,n是陣列元素個數
3.upper_bound()和lower_bound()函式的使用前提是陣列或者vectora是有序的。他們有三個引數,其使用手法為:
lower_bound(a.begin() , a.end() , x) - a ; //在整個vector容器中查詢第乙個大於等於x的數的下標
lower_bound(a , a + n , x) - a ; //在整個陣列中查詢第乙個大於等於x的數的下標,n是陣列元素個數
upper_bound(a.begin() , a.end() , x) - a ; //在整個vector容器中查詢第乙個大於x的數的下標
upper_bound(a , a + n , x) - a ; //在整個陣列中查詢第乙個大於x的數的下標,n是陣列元素個數
思路:
1.首先,陣列元素個數小於3,則不是有效的。
2.如果有相鄰元素相等的情況出現,則不是有效的。
3.這道題資料範圍比較小,在這次直接遍歷陣列,找到第乙個a[i] > a[i + 1]的情況,此時的i即為最大值的下標。
4.如果i是0或者a.size() - 1 , 即陣列是單調遞增或者單調遞減的, 則不是有效的。
5.從最大值下標開始繼續向後遍歷陣列,如果出現a[i] < a[i + 1] ,即元素遞增情況 , 則不是有效的。
6.所有無效情況都不滿足,即為有效的。
ac**:
class solution
for(int i = 0 ; i < n - 1 ; i ++)
}if(x == n - 1 || x == 0) return false;
for(int i = x ; i < n - 1 ; i ++)
return true;}};
力扣 941 有效的山脈陣列
給定乙個整數陣列 a,如果它是有效的山脈陣列就返回 true,否則返回 false。讓我們回顧一下,如果 a 滿足下述條件,那麼它是乙個山脈陣列 a.length 3 在 0 i a.length 1 條件下,存在 i 使得 a 0 a 1 a i 1 a i a i a i 1 a a.lengt...
每日一題 力扣 計畫
98 驗證二叉搜尋樹 問題給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 1.節點的左子樹只包含小於當前節點的數。2.節點的右子樹只包含大於當前節點的數。3.所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true示例2 輸入 5 1 4...
力扣每日一題 6 14
1300 轉變陣列後最接近目標值的陣列和 給你乙個整數陣列 arr 和乙個目標值 target 請你返回乙個整數 value 使得將陣列中所有大於 value 的值變成 value 後,陣列的和最接近 target 最接近表示兩者之差的絕對值最小 如果有多種使得和最接近 target 的方案,請你返...