LintCode 14 二分查詢 C

2021-08-15 05:48:27 字數 755 閱讀 5634

問題描述:給定乙個排序的整數陣列(公升序)和乙個要查詢的整數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 樣例解釋 ...