解:
try1
常规解法
要注意边界值的判断,比如比列表中所有值都大、比列表中所有值都小
(注:优化后不再需要边界的判断,因为代码满足边界情况)
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l = 0
r = len(nums) - 1
if nums[len(nums)-1]<target:
return len(nums)
if target<nums[0]:
return 0
while l <= r:
mid = l + (r - l)/2
if nums[mid] == target:
return mid
elif nums[mid] > target:
r = mid - 1
if nums[mid-1]<target:
return mid
elif nums[mid] < target:
l = mid + 1
if nums[mid+1]>target:
return mid+1
try2
对常规解法进行优化
发现了以下两点:
1.对mid取值 mid = (l + r )//2
Python 除法/和//的区别
整除号://
整除运算,结果向负无穷方向去,取最近的整数
浮点数除法:/
返回float型
使用强制类型转换取整数:int()
结果向0靠近,取最近的整数
mid = (l + r )/2
mid = (l + r )//2
2.确定了最终返回值是哪个变量可以省略很多步骤
优化后
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l = 0
r = len(nums) - 1
while l <= r:
mid = l + (r - l)//2
if nums[mid] == target:
return mid
elif nums[mid] > target:
r = mid - 1
elif nums[mid] < target:
l = mid + 1
return l