LintCode問題圖解-3

本文準備講解1個簡單的算法編程問題, 這個算法編程問題來自LintCode平臺。不了解.LintCode平臺的讀者可以閱讀筆者文章(在線編程平臺推薦-LeetCode)。問題的英文版本描述如下:

First Position of Target

For a given sorted array (ascending order) and a target number, find the first index of this number in O(log n) time complexity.

If the target number does not exist in the array, return -1.

Example

If the array is [1, 2, 3, 3, 4, 5, 10], for given target 3, return 2.

? 問題的中文版本描述:

二分查找

給定一個排序的整數數組(升序)和一個要查找的整數 target,用O(logn)的時間查找到 target 第一次出現的下標(從0開始),如果 target 不存在于數組中,返回-1。

樣例

在數組[1, 2, 3, 3, 4, 5, 10]中二分查找3,返回2。

? 剛好JAVA語言支持對數組的二分查找,所以這個問題很有價值。JAVA語言自帶的數組二分查找函數無法支持數組中有重復數據的狀況,當數組中有重復數據時,自帶函數不保證返回的返回值為需要的目標數據數組下標號。比如對樣例數組,查找3返回3;而不是題目需要的2。為了處理重復數據的問題,必須對經典二分查找算法做改造。關鍵的算法為:找到目標數據后,不能中斷查找算法;繼續尋找數組下標號最小的目標數據項。

? 算法的代碼列表如下:


推薦的算法

? 現在公布1種高效的算法方案,該方案對應 LintCode 平臺表現更強。


高效的算法
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容