时间复杂度:O(logn)
二分查找应用场景的局限性:
1.二分查找依赖的是顺序表结构,简单的说就是数组;
2.二分查找针对的是有序数据;
3.数据量太小,不适合二分查找,数据量大时;
4.数据量太大,不适合使用二分查找,二分查找底层依赖数组,需要连续的内存空间,太大的话不容易找到;
5.如果数据之间的比较操作非常耗时,不管数据量大小,都推荐使用二分查找。
简单的二分查找场景:有序数组不存在重复元素
python 实现(非递归实现):
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 实现(递归实现):
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)
网友评论