leetcode 資料結構 二分查詢

2021-10-01 05:26:56 字數 1059 閱讀 7438

參考要求o(logn) 時間複雜度一般考慮二分法。

int mid =

(left + right)/2

;

leftright都比較大的時候,left + right很有可能超過int型別能表示的最大值,即整型溢位。

int mid = left +

(right - left)/2

;

right很大、left是負數且很小的時候,right - left也有可能超過int型別能表示的最大值,只不過一般情況下leftright表示的是陣列索引值,left是非負數,因此right - left溢位的可能性很小。

當陣列的元素個數是偶數的時候,中位數有左中位數和右中位數之分。

//此時搜尋範圍是[0~len]

int left =0;

int right = len;

//陣列最後乙個數的索引

int mid = left +

(right - left)/2

;//得到左中位數的索引

int mid = left +

(right - left +1)

/2;//得到右中位數的索引

最好的寫法

int mid =

(left + right)

>>

1;

首先把迴圈可以進行的條件寫成while(left < right),在退出迴圈的時候,一定有left == right成立,此時返回left或者right都可以。

35 搜尋插入位置

二分查詢演算法細節詳解

資料結構之二分與並查集

二分 leetcode 287.尋找重複數 給定乙個包含 n 1 個整數的陣列 nums,其數字都在 1 到 n 之間 包括 1 和 n 可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。示例 1 輸入 1,3,4,2,2 輸出 2 示例 2 輸入 3,1,3,4,2 輸出 3 ...

資料結構 二分查詢

二分查詢演算法也稱為折半搜尋 二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為...

資料結構 二分查詢

總共有n個元素,漸漸跟下去就是n,n 2,n 4,n 2 k 接下來操作元素的剩餘個數 其中k就是迴圈的次數。由於你n 2 k取整後 1,即令n 2 k 1,可得k log2n,是以2為底,n的對數 所以時間複雜度可以表示o o logn public class binarysearch else...