704.二分查找
随想录链接:代码随想录 (programmercarl.com)
代码如下:
#1.左闭右闭
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1 #左闭右闭
while left <= right:
middle = left + (right - left) // 2
if nums[middle] > target: # 中间数 > target 区间划到[left, middle-1]
right = middle -1
elif nums[middle] < target:
left = middle + 1 # 中间数 < target 区间划到[middle + 1, right]
else:
return middle
return -1
#2.左闭右开
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) #左闭右开
while left < right:
middle = left + (right - left) // 2
if nums[middle] > target: # 中间数 > target 区间划到[left, middle-1]
right = middle
elif nums[middle] < target:
left = middle + 1 # 中间数 < target 区间划到[middle + 1, right]
else:
return middle
return -1
两种解题方法,区别就在于 区间的选择上
左闭右闭 left = 0, right = len(nums)-1 判断middle > target时,right = middle -1
左闭右开 left = 0, right = len(nums) 判断middle > target时,right = middle
在力扣上的运行结果,左闭右开运行更快
27.移除元素
随想录链接:代码随想录 (programmercarl.com)
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
# 快慢指针
fast = 0 # 快指针
slow = 0 # 慢指针
size = len(nums)
while fast < size: # 不加等于是因为,a = size 时,nums[a] 会越界
# slow 用来收集不等于 val 的值,如果 fast 对应值不等于 val,则把它与 slow 替换
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
双指针法很常用,今天从随想录第一天开始掌握
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置