class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
s,e=0,len(nums)-1
while(s<=e): # 只有没有找到才会在这里跳出循环
mid=(s+e)//2 # 如果s==e的时候即查找数组只有一个数的时候,中位数即她本身
if(nums[mid]==target):return mid
elif(nums[mid]<target):
s=mid+1
if(s-1==e): return s
else:
e=mid-1
if(e+1==s):return e+1 # 其实是s
对代码进行简洁化
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
s,e=0,len(nums)-1
while(s<=e):
mid=(s+e)//2
if(nums[mid]==target):return mid
elif(nums[mid]<target):s=mid+1
else:e=mid-1
return s
迭代算法
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
s,e=0,len(nums)-1
return self.BinaryDiedai(nums,target,s,e)
def BinaryDiedai(self,nums:List[int],target:int,start:int,end:int)->int:
if(start>end):return start
mid=(start+end)//2
if(nums[mid]==target):return mid
elif(target>nums[mid]):return self.BinaryDiedai(nums,target,mid+1,end)
else:return self.BinaryDiedai(nums,target,start,end-1)
python奇技淫巧 O(n)
···
return len([x for x in nums if x<target])
···