問題描述:給定乙個排序的整數陣列(公升序)和乙個要查詢的整數target,用
o(logn)
的時間查詢到
target
第一次出現的下標(從
0開始),如果
target
不存在於陣列中,返回-1。
樣例:在陣列 [1, 2, 3, 3, 4, 5, 10] 中二分查詢
3,返回2。
分析:二分查詢,又叫折半查詢,,是一種高效率的查詢方式,查詢的前提是被查詢的資料必須是有序的。二分查詢的思想是找到查詢區間[i,j]的中點位置
mid,比較
mid位置上的值與
target
的大小,根據大小在調整查詢區間,這樣不斷地縮小查詢範圍,直至區間為0。
熟悉二分查詢的話,就要把注意放到
如何返回第一次出現的下標。我的思路是當找到乙個與target相同的值時,跳出二分查詢,用變數
j去檢索
mid之前的數值,直到數值不等於
target
,那麼此時
j+1即為第一次出現的下標。
class solution else if(array[mid] < target)else
}while(array[j] == target)
mid = j + 1;
if(array[mid] == target )
return -1;
}};
如有錯誤,歡迎指出。
LintCode 14 二分查詢
給定乙個排序的整數陣列 公升序 和乙個要查詢的整數target,用o logn 的時間查詢到target第一次出現的下標 從0開始 如果target不存在於陣列中,返回 1。在陣列 1,2,3,3,4,5,10 中二分查詢3,返回2。如果陣列中的整數個數超過了 2 32 你的演算法是否會出錯?在有序...
LintCode 14 二分查詢
給定乙個排序的整數陣列 公升序 和乙個要查詢的整數target,用o logn 的時間查詢到target第一次出現的下標 從0開始 如果target不存在於陣列中,返回 1。樣例 在陣列 1,2,3,3,4,5,10 中二分查詢3,返回2。挑戰 如果陣列中的整數個數超過了2 32,你的演算法是否會出...
LintCode 14(二分查詢)
lintcode系列,第14題,題目 給定乙個排序的整數陣列 公升序 和乙個要查詢的整數target,用o logn 的時間查詢到target第一次出現的下標 從0開始 如果target不存在於陣列中,返回 1。樣例 樣例 1 輸入 1,4,4,5,7,7,8,9,9,10 1 輸出 0 樣例解釋 ...