704. 二分查找
本题是默认升序,所以简单
左闭右闭:因为边界是等待验证的,而mid是已经验证过的,所以新的边界不能包含已验证的mid
class Solution:
def search(self, nums: List[int], target: int) -> int:
l,r=0,len(nums)-1
while l<=r:
m=l+(r-l)//2
if nums[m]<target:
l=m+1
elif nums[m]>target:
r=m-1
else:
return m
return -1
左闭右开:因为右边界是不包含的,而mid是已经验证过的,所以新的右边界设置为已验证的mid即可
class Solution:
def search(self, nums: List[int], target: int) -> int:
l,r=0,len(nums)
while l<r:
m=l+(r-l)//2
if nums[m]<target:
l=m+1
elif nums[m]>target:
r=m
else:
return m
return -1
区别:除了迭代后的边界以外,注意起始边界的设定,和终止条件
27. 移除元素
快慢指针法:
本题主要难点是原地移除
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
s,f=0,0
l=len(nums)
while f<l:
if nums[f]==val:
f+=1
continue
else:
nums[s]=nums[f]
s+=1
f+=1
return s