704.二分查找. - 力扣(LeetCode)
思路:使用二分法(一种左闭右闭,一种左闭右开)
第一种:左闭右闭
注意:right=len(nums)-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:
right=middle-1
elif nums[middle]<target:
left=middle+1
else:
return middle
return -1
第二种:左闭右开
注意:right=len(nums)
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:
right=middle
elif nums[middle]<target:
left=middle+1
else:
return middle
return -1
注意:right的变化 ,边界问题,left+ (right left) / 2。这种写法可以避免越界
27.移除元素. - 力扣(LeetCode)
暴力解法
i, l = 0, len(nums)
while i < l:
if nums[i] == val: # 找到等于目标值的节点
for j in range(i+1, l): # 移除该元素,并将后面元素向前平移
nums[j - 1] = nums[j]
l -= 1
i -= 1
else:
i += 1
return l
双指针
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
fast = 0 # 快指针
slow = 0 # 慢指针
size = len(nums)
while fast < size:
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
总结
1.学习了二分法 查找元素
3.快慢指针移除元素
2。range()中 i 需要有运算