二分查找是一种高效的查询方法,时间复杂度为O(nlogn),本文给出二分查找的代码实现。
示例:
代码:
class Solution:
def search(self, nums, target):
l, r = 0, len(nums) - 1
while l <= r:
mid = (l + r) // 2
if nums[mid] > target:
r = mid - 1
elif nums[mid] < target:
l = mid + 1
else:
return mid
return -1
解释:
1)当nums[mid] > target时表明target在[0, mid]区间内,故将右指针r移至mid-1,同理当nums[mid] < target时表明target在[mid, len(nums) - 1]区间内,将左指针移至mid+1,直到不满足循环l<=r时退出或找到target的位置返回下标指针。
2)注意while循环的条件l<=r,若为l<r,则当数组只有一个元素时将无法返回正确下标位置。