二分查找
class Solution:
def search(self, nums, target) :
low = 0
high = len(nums) - 1
while low <= high:
mid = int((low + high) / 2)
if target < nums[mid]:
high = mid - 1
elif target > nums[mid]:
low = mid + 1
elif target == nums[mid]:
return mid
return -1
278. 第一个错误的版本
# The isBadVersion API is already defined for you.
# def isBadVersion(version: int) -> bool:
class Solution:
def firstBadVersion(self, n: int) -> int:
low=1
high=n
while low <= high:
mid = int((low + high) / 2)
if isBadVersion(mid)==False:
low = mid + 1
elif isBadVersion(mid)==True:
high = mid - 1
return low
搜索插入位置
关键还是二分查找。
二分查找的变种,需要考虑边界问题。
class Solution:
def searchInsert(self, nums, target):
low = 0
high = len(nums)
while low <= high:
mid = (low + high) // 2
if target > nums[-1]:
return len(nums)
elif target<nums[0]:
return 0
elif nums[mid] < target:
low = mid + 1
elif nums[mid] > target:
high = mid - 1
elif nums[mid] == target:
return mid
if nums[mid]>target:
return mid
else:
return mid+1