Leetcode之二分查詢法

2021-09-29 15:09:41 字數 1230 閱讀 4434

針對的是乙個有序陣列進行查詢的情況,用二分查詢法進行資料查詢是乙個不錯的選擇,時間複雜度o(log(n)),定義start和end,不斷改變start和end的值來縮小查詢的區域

public

intsearch

(int

array ,

int a)

else

if(array[temp]

else

}//start==end跳出時判斷是否找到

if(array[start]

!=a)

return start;

}

class

solution

//定義imax=m而不是m-1是為了保證imin+imax>=0

int imin =

0, imax = m, halflen =

(m + n +1)

/2;while

(imin <= imax)

else

if(i > imin && a[i-1]

> b[j]

)else

//j==0時,j-1越界

else

if(j ==0)

//其他情況,maxleft取a[i-1],a[j-1]中的最大值

else

//如果m+n為奇數,則只有乙個中間數為中位數if(

(m + n)%2

==1)int minright =0;

//i==m時,i越界

if(i == m)

//j越界

else

if(j == n)

else

return

(maxleft + minright)

/2.0;}

}return

0.0;

}}

總結下來就三點:1.分界線,即i,j,halflen的取值,取i,j左邊的為left,i,j自身以及右邊放入right,根據自己的分界情況陣列角標也不同。2.對陣列為空的處理,因為要考慮到陣列可能為空,imax取m,才能保證imax+imin大於0,因為-1/2=0,0/2=0,1/2=0結果的i都為0,不能具體判斷i==0是由什麼導致的,主要是方便區分陣列為空的情況。3.越界問題,i=0時i-1越界,i=m時i越界,j同理

LeetCode之二分查詢

介紹 給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target 寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。示例 1 輸入 nums 1,0,3,5,9,12 target 9 輸出 4 解釋 9 出現在 nums 中並且下標為 4示...

演算法之二分查詢法

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...

演算法之二分查詢法

所謂的二分查詢法,就是對於乙個有序列表,通過每次取中間值來判斷是否為所要查詢的數值。比如我們聚會時玩的猜數字遊戲,0到100之間猜乙個數值,有兩種方法 一是我們可以乙個乙個的去猜,但是這樣比較耗時,效率低 其次就是二分法,第一次取中間值50,對方會告訴你高了或者低了,若高了,繼續取0到49的中間值2...