704. 二分查找
二分查找是O(logn),注意左闭右开和左闭右闭两种取法
左闭右开:
class Solution:
def search(self, nums: List[int], target: int) -> int:
l,r=0,len(nums)
while(l<r):
if nums[l]>target or nums[r-1]<target:
return -1
mid=(l+r)>>1
if nums[mid]==target:
return mid
elif nums[mid]>target:
r=mid
else:
l=mid+1
if nums[l]==target: return l
return -1
左闭右闭
class Solution:
def search(self, nums: List[int], target: int) -> int:
l,r=0,len(nums)-1
while(l<=r):
mid=(l+r)>>1
if nums[mid]==target:
return mid
elif nums[mid]>target:
r=mid-1
else:
l=mid+1
return -1
27. 移除元素
注意快慢指针,用快指针找新元素赋给慢指针
def removeElement(nums, val):
i,j=0,0
while i<len(nums):
if nums[i]!=val:
nums[j]=nums[i]
j+=1
i+=1
return j