leetcode專題訓練 二分搜尋

2021-10-21 21:05:10 字數 1501 閱讀 7463

1、35. 搜尋插入位置

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

你可以假設陣列中無重複元素。

2、74. 搜尋二維矩陣

編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性:

每行中的整數從左到右按公升序排列。

每行的第乙個整數大於前一行的最後乙個整數。

解答:從後往前,搜到目標值所在的行

3、278. 第乙個錯誤的版本

你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。

假設你有 n 個版本 [1, 2, ..., n],你想找出導致之後所有版本出錯的第乙個錯誤的版本。

你可以通過呼叫 bool isbadversion(version) 介面來判斷版本號 version 是否在單元測試**錯。實現乙個函式來查詢第乙個錯誤的版本。你應該儘量減少對呼叫 api 的次數。

4、153. 尋找旋轉排序陣列中的最小值

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] 。

請找出其中最小的元素。

解答:如果陣列變化了,找到首元素被移動到**去了

5、154. 尋找旋轉排序陣列中的最小值 ii

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

請找出其中最小的元素。

注意陣列中可能存在重複的元素。

解答:當numbers[mid]==numbers[right] ,不斷搜小右邊界。

6、33. 搜尋旋轉排序陣列

解答:首先判斷左邊是不是順序增加的,再分情況判斷在左邊還是右邊

7、81. 搜尋旋轉排序陣列 ii

專題訓練之BFS DFS 二分

bsf是指寬度優先搜尋。從我的理解來說,就是從乙個節點出發,一步步地走從該節點出發,實現所有的可能性。在以前學資訊學競賽的時候,我們老師曾這麼這麼解釋 bfs就是從乙個點出發,一直走到底,豎著一列列搜尋 dfs就是從乙個點出發,走所有可能的地方,橫著一層層搜尋。搜尋完當前點,回溯的時候,要注意還原原...

二分專題題解

題目大意為給一條直線上的n個點,讓你隨意選取c個點,然後使得這c個點兩兩之間的最小距離最大,如何選取這c個點使這個最小距離最大,輸出最大的最小距離max。先把座標排序,之後界定二分的範圍,二分的縮小範圍的條件則為當兩點距離大於所輸入的點時,s 返回s。如若s大於所處的點,說明值太小,將左界變為mid...

整體二分專題

何謂整體二分?一般的二分只適用於單個詢問的,如果有很多個詢問,就變成了n 2n 2 n2或更高但整體二分則可以迅速處理多個詢問的問題 首先需要離線,讀入所有詢問 然後我們二分答案,這時候我們將詢問分成兩個部分,如果l r就直接更新答案,否則考慮分治,詢問的答案在左邊的丟到左邊,答案在右邊的則丟到右邊...