針對的是乙個有序陣列進行查詢的情況,用二分查詢法進行資料查詢是乙個不錯的選擇,時間複雜度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...