時(shí)間復(fù)雜度:O(logn)
二分查找應(yīng)用場(chǎng)景的局限性:
1.二分查找依賴的是順序表結(jié)構(gòu),簡(jiǎn)單的說就是數(shù)組;
2.二分查找針對(duì)的是有序數(shù)據(jù);
3.數(shù)據(jù)量太小,不適合二分查找,數(shù)據(jù)量大時(shí);
4.數(shù)據(jù)量太大,不適合使用二分查找,二分查找底層依賴數(shù)組,需要連續(xù)的內(nèi)存空間,太大的話不容易找到;
5.如果數(shù)據(jù)之間的比較操作非常耗時(shí),不管數(shù)據(jù)量大小,都推薦使用二分查找。
簡(jiǎn)單的二分查找場(chǎng)景:有序數(shù)組不存在重復(fù)元素
python 實(shí)現(xiàn)(非遞歸實(shí)現(xiàn)):
class Solution:
def bsearch(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
low = 0
high = len(nums) - 1
while low <= high:
mid = low + ((high - low) >> 1)
if nums[mid] == val:
return mid
if nums[mid] < val:
low = mid + 1
elif nums[mid] > val:
high = mid - 1
return -1
python 實(shí)現(xiàn)(遞歸實(shí)現(xiàn)):
class Solution:
def bsearch(self, nums, low, high, val):
"""
:type nums: List[int]
:type low: int
:type high: int
:type val: int
"""
if low > high:
return -1
mid = low + ((high-low) >> 1)
if nums[mid] == val:
return mid
if nums[mid] > val:
high = mid - 1
elif nums[mid] < val:
low = mid + 1
return self.bsearch(nums, low, high, val)