14 二分查詢

2021-09-28 23:36:37 字數 1420 閱讀 1347

給定乙個排序的整數陣列(公升序)和乙個要查詢的整數target,用o(logn)的時間查詢到target第一次出現的下標(從0開始),如果target不存在於陣列中,返回-1。

樣例 1:

輸入:[1,4,4,5,7,7,8,9,9,10],1

輸出: 0

樣例解釋:

第一次出現在第0個位置。

樣例 2:

輸入: [1, 2, 3, 3, 4, 5, 10],3

輸出: 2

樣例解釋:

第一次出現在第2個位置

樣例 3:

輸入: [1, 2, 3, 3, 4, 5, 10],6

輸出: -1

樣例解釋:

沒有出現過6, 返回-1

如果陣列中的整數個數超過了2^32,你的演算法是否會出錯?

我自己寫的

public class solution  else 

} else if (nums[flag] > target) else

if (start == flag) else if (end == flag)

}return ret;

}}

別人的寫法

/**

* 不使用遞迴的二分查詢

*title:commonbinarysearch

*@param arr

*@param key

*@return 關鍵字位置

*/public static int commonbinarysearch(int arr,int key)

while(low <= high)else if(arr[middle] < key)else

}return -1; //最後仍然沒有找到,則返回-1

}//標準的寫法

public class solution else if (midval > value) else

}return lo; // 沒找到

}}

遞迴

/**

* 使用遞迴的二分查詢

*title:recursionbinarysearch

*@param arr 有序陣列

*@param key 待查詢關鍵字

*@return 找到的位置

*/public static int recursionbinarysearch(int arr,int key,int low,int high)

int middle = (low + high) / 2; //初始中間位置

if(arr[middle] > key)else if(arr[middle] < key)else

}

14 二分查詢

給定乙個排序的整數陣列 公升序 和乙個要查詢的整數target,用o logn 的時間查詢到target第一次出現的下標 從0開始 如果target不存在於陣列中,返回 1。樣例 在陣列 1,2,3,3,4,5,10 中二分查詢3,返回2。思路 1 target array mid 時,不能直接返回...

14 二分查詢

給定乙個排序的整數陣列 公升序 和乙個要查詢的整數target,用o logn 的時間查詢到target第一次出現的下標 從0開始 如果target不存在於陣列中,返回 1。樣例 在陣列 1,2,3,3,4,5,10 中二分查詢3,返回2。思路 定三個座標,頭座標,尾座標,中間座標,每次判斷要查詢的...

14 二分查詢

給定乙個排序的整數陣列 公升序 和乙個要查詢的整數target,用o logn 的時間查詢到target第一次出現的下標 從0開始 如果target不存在於陣列中,返回 1。在陣列 1,2,3,3,4,5,10 中二分查詢3,返回2。如果陣列中的整數個數超過了2 32,你的演算法是否會出錯?思路 剛...