2 二分查詢(下)

2021-10-23 17:11:37 字數 2688 閱讀 9580

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

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

搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

你可以假設陣列中不存在重複的元素。

你的演算法時間複雜度必須是 o(log n) 級別。

輸入: nums = [4,5,6,7,0,1,2], target = 0

輸出: 4

輸入: nums = [4,5,6,7,0,1,2], target = 3

輸出: -1

class

solution

//此時lo和hi都指向最小元素

if(nums[n]

< target)

else

while

(lo < hi)

return nums[lo]

== target ? lo :-1

;}}

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

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

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

/* the isbadversion api is defined in the parent class versioncontrol.

boolean isbadversion(int version); */

public

class

solution

extends

versioncontrol

return lo;

}}

或者先把lo變數提公升為long型別,再去做加法,最後強轉為int。

/* the isbadversion api is defined in the parent class versioncontrol.

boolean isbadversion(int version); */

public

class

solution

extends

versioncontrol

return lo;

}}

峰值元素是指其值大於左右相鄰值的元素。

給定乙個輸入陣列 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素並返回其索引。

陣列可能包含多個峰值,在這種情況下,返回任何乙個峰值所在位置即可。

你可以假設 nums[-1] = nums[n] = -∞。

輸入: nums = [1,2,3,1]

輸出: 2

解釋: 3 是峰值元素,你的函式應該返回其索引 2。

輸入: nums = [1,2,1,3,5,6,4]

輸出: 1 或 5

解釋: 你的函式可以返回索引 1,其峰值元素為 2;

或者返回索引 5, 其峰值元素為 6。

class

solution

return lo;

}}

class

solution

return lo;

}}

給定乙個包含 n + 1 個整數的陣列 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。

輸入: [1,3,4,2,2]

輸出: 2

輸入: [3,1,3,4,2]

輸出: 3

class

solution

if(left > mi - lo +1)

else

}return lo;

}}

給定一位研究者**被引用次數的陣列(被引用次數是非負整數),陣列已經按照 公升序排列 。編寫乙個方法,計算出研究者的 h 指數。

h 指數的定義: 「h 代表「高引用次數」(high citations),一名科研人員的 h 指數是指他(她)的 (n 篇**中)總共有 h 篇**分別被引用了至少 h 次。(其餘的 n - h 篇**每篇被引用次數不多於 h 次。)"

輸入: citations = [0,1,3,5,6]

輸出: 3

解釋: 給定陣列表示研究者總共有 5 篇**,每篇**相應的被引用了 0, 1, 3, 5, 6 次。

由於研究者有 3 篇**每篇至少被引用了 3 次,其餘兩篇**每篇被引用不多於 3 次,所以她的 h 指數是 3。

二分[0, n],**數。尋找滿足條件的最右邊界。

class

solution

return lo;

}}

二分查詢 2

v1中使用while迴圈的方式,我們也可以不使用迴圈,使用遞迴的方式來實現 public static intbinarysearch v2 int array,int value public static intmysearch int array,int start,int end,int v...

1026 二分查詢(下)

目錄 一 四種常見的二分查詢變形問題 二 實現 三 適用性分析 四 思考 1.查詢第乙個值等於給定值的元素 2.查詢最後乙個值等於給定值的元素 3.查詢第乙個大於等於給定值的元素 4.查詢最後乙個小於等於給定值的元素 前提假設 以資料是從小到大排列為前提來實現 1.查詢第乙個值等於給定值的元素,比如...

總結 二分查詢(下)

總結 二分查詢 下 一 四種常見的二分查詢變形問題 16 二分查詢 下 如何快速定位ip對應的省份位址?file j geektime 唯一更新qq群170701297 ebook 資料結構與演算法之美 16二分查詢 下 如何快速定位ip對應的省份位址?html 2019 2 17 17 27 19...