給定乙個排序的整數陣列(公升序)和乙個要查詢的整數target,用o(logn)的時間查詢到target第一次出現的下標(從0開始),如果target不存在於陣列中,返回-1。說明樣例在陣列 [1, 2, 3, 3, 4, 5, 10] 中二分查詢3,返回2。
挑戰如果陣列中的整數個數超過了2^32,你的演算法是否會出錯?
標籤二分法 陣列
普通的二分查詢,陣列中整數超過2^32會導致演算法出錯。
code
class solution
return find;
}};
改進思路
若陣列長度大於2^32,則low, mid, high三個陣列下標均有可能超出int的表示範圍,可以採取的改進思路是:
拆分array陣列,使每個子陣列的長度均小於2^32,每個子陣列長度為size
將target與每個子陣列的頭尾比較,若存在target大於此陣列頭部且小於此陣列尾部,則對此陣列進行二分查詢
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 樣例解釋 ...