假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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...