查找

二分
二分查找
1
2
3
4
5
6
7
8
9
10
11
12
13def binary_search(arr, target):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
else:
if arr[mid] > target:
right = mid - 1
else:
left = mid + 1
return -1lower_bound:查找第一个大于或等于target的元素位置。
1
2
3
4
5
6
7
8
9
10def low_bound(arr, target):
left = 0
right = len(arr)-1
while left <= right:
mid = (left + right) // 2
if arr[mid] >= target:
right = mid - 1
else:
left = mid + 1
return leftupper_bound:查找第一个大于target的元素位置。
1
2
3
4
5
6
7
8
9
10def low_bound(arr, target):
left = 0
right = len(arr)-1
while left <= right:
mid = (left + right) // 2
if arr[mid] > target:
right = mid - 1
else:
left = mid + 1
return left