35.搜索插入位置
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if not nums:return 0
# 二分法查找元素索引
i, j = 0, len(nums)-1
while i < j:
mid = int((i + j)/2)
if nums[mid] == target:
return mid
elif nums[mid] > target:
j = mid-1
else:
i = mid+1
# i == j
return i if nums[i] >= target else i+1
278.第一个错误的版本
if not n:return -1
# 二分法查找元素索引
i, j = 1, n
while i < j:
mid = int((i + j)/2)
if isBadVersion(mid):
j = mid -1
else:
i = mid
if isBadVersion(i):return i
else:return i+1
不知道为啥这样就超时了。。好像是如果mid是badversion,mid又刚好是分界点的badversion, j=mid-1这波操作就把正确答案给跳过去了,所以正确版本可以跳过,错误版本决不能跳过。
left, right = 1, n
while left < right:
mid = left + (right-left)//2
if not isBadVersion(mid):
left = mid + 1
else:
right = mid
return left
这样就可以