「這個陣列是排序好的,這時我們就可以使用二分查詢去找這個數,我們可以選擇陣列中間的元素,這個中間元素會把陣列分成前後兩個相等的區間,如果我們要找的元素比中間元素要大,證明這個元素只可能在後半部分區間,我們就只需要去到後半部分區間用類似的方法再次查詢;如果比中間元素要小,則需要去到前半部分區間用類似的方法再次查詢,直到最後我們找到了,或者說整個陣列給分完了(沒找到),這樣的話時間複雜度是 o(logn)。」
二分查詢適用於已經排好序的陣列(非遞增/非遞減),比較target與nums[mid],去判斷出乙個區間,在這個區間裡,有我們想要的答案,同時我們可以將這個區間縮短到一定程度,從而直接得到答案。
敲黑板!!重點!背住!
int start =
0, end = nums.length -1;
while
(start +
1< end)
else
}
防止下標越界:start + (end - start) / 2;
你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。假設你有 n 個版本 [1, 2, …, n],你想找出導致之後所有版本出錯的第乙個錯誤的版本。
你可以通過呼叫 bool isbadversion(version) 介面來判斷版本號 version
是否在單元測試**錯。實現乙個函式來查詢第乙個錯誤的版本。你應該儘量減少對呼叫 api 的次數。
示例:理解題目的要求,是要找出第乙個錯誤的版本。是第什麼,要小心。給定 n = 5,並且 version = 4 是第乙個錯誤的版本。
呼叫 isbadversion(3) -> false
呼叫 isbadversion(5) -> true
呼叫 isbadversion(4) -> true
所以,4 是第乙個錯誤的版本。
有n個版本,注意細節!!這裡沒有放在陣列裡面討論。我們要控制好迴圈的條件
left可以從1開始,right =n,則一樣也是迴圈n次。
public
intfirstbadversion
(int n)
else}if
(isbadversion
(left)
)return right;
}
參考:二分查詢模板、題型全面解析 UIApplication深入學習
新建乙個任意型別的ios應用工程,加入我們在class prefix輸入是tc,我們可以看到工程中生成乙個類 在main函式中,autoreleasepool 函式中 說明 當應用程式將要入非活動狀態執行,在此期間,應用程式不接收訊息或事件。比如來 了。說明 當應用程式入活動狀態執行,這個剛好跟上面...
深入學習CSS
什麼是css?在之前的這篇文章中已經介紹了初步的介紹,詳細請看 div加css進一步講解了css中的內容,先總結如下圖 其實在實際開發中,我們通常採用是外部樣式的匯入,這樣做的好處是對於很對有同樣設計樣式的頁面可以實現樣式的共享,這樣我們不僅僅可以節省了大量的時間,並且也方便我們可以靈活的呼叫的樣式...
block深入學習
block的宣告和使用看上一節就行了。本章主要講block內部的實現過程及原理。block的定義和函式指標非常相似 對比一下 block定義 void someblock 函式指標定義 void functionpionter void functionname 當然區別還是有的,block的返回型...