十一. 二分法
代码模板:
left, right = 0, len(array)-1
while left <= right:
mid = left + (right - left)/2
if array[mid] == target:
break or return result
elif array[mid] < target:
left = mid + 1
else:
right = mid - 1
35. 搜索插入位置
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
def searchInsert(self, nums: List[int], target: int) -> int:
# 思路:二分查找法,复杂度O(log n)
# 返回插入的位置要分两种情况:1. List中有; 2. List中没有
# 注意:python的List的index操作是O(1)复杂度。
left = 0
right = len(nums)-1
if target < nums[left]:
return 0
if target > nums[right]:
return right+1
while left <= right:
if target == nums[left]:
return left
if target == nums[right]:
return right
mid = floor(left + ( right - left ) / 2)
print(mid)
if target == nums[mid]:
return mid
elif target >= nums[mid]:
left = mid + 1
else:
right = mid - 1
if nums[right] > target:
return right
else:
return right+1
278. 第一个错误的版本
题目:第一个错误的版本
输入:n = 5, bad = 4 [FFFTT]
输出:4
def firstBadVersion(self, n):
left, right = 1, n
while left < right:
mid = left + ( right - left ) / 2
if isBadVersion(mid):
right = mid
else:
left = mid + 1
return int(left)
网友评论