九章算法面試題85 搜索區間

原文網址

www.jiuzhang.com

問題詳情 

給定一個包含 n 個整數的排序數組,找出給定目標值 target 的起始和結束位置。
如果目標值不在數組中,則返回[-1, -1]

在線評測本題:

http://www.lintcode.com/zh-cn/problem/search-for-a-range/

解答 

這道題既然要求O(log n)那必然和binary search相關。那麼題目其實上是要找到給出的target區間[left,right]在數組中的左右邊界。我們用二分,分別找到left和right在數組裏面對應的左邊界和右邊界。
二分的方法如下:
對搜索left:如果left = A[mid]則繼續向左找,否則向右找。直到搜索結束,left = start
對搜索right:如果right = A[mid]則繼續向右找,否則向左找。直到搜索結束,right = end
最後判斷如果A[left], A[right] != target,則表明target不存在於數組中, left = right = -1

參考代碼:

http://www.jiuzhang.com/solutions/search-for-a-range/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章