704.二分法查找
【简单题】【题目链接】
- 二分法查找时间复杂度为On(log(n))
- 写法两种,开区间 [left,right) 和 闭区间 [left,right] ;
- 取等/加一与否的主要思路看left和right的取值是否有意义
开区间
class Solution:
def search(self, nums: List[int], target: int) -> int:
left,right = 0,len(nums) #开区间[) right没有意义
while(left<right):
mid = (right-left)//2+left
if nums[mid]<target:
left = mid + 1
elif nums[mid]>target:
right = mid
else:
return mid
return -1
闭区间
class Solution:
def search(self, nums: List[int], target: int) -> int:
left,right = 0,len(nums)-1 #闭区间 left,right都有意义
while(left<=right):
mid = (right-left)//2+left
if nums[mid]<target:
left = mid + 1
elif nums[mid]>target:
right = mid-1
else:
return mid
return -1
27.移除元素
【简单题】【题目链接】
- 快慢指针,跟二分一样需要注意的地方是取值是否有意义
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
size = len(nums)
slow,fast = 0,0
while(fast<size):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow