704. 二分查找
左闭右闭
class Solution:
def search(self, nums: List[int], target: int) -> int:
low = 0
high = len(nums)-1
while low<=high:
mid = (low+high)//2
if nums[mid]<target:
low = mid+1
elif nums[mid]>target:
high = mid-1
else:
return mid
return -1
35. 搜索插入位置
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
low = 0
high = len(nums)-1
while low<=high:
mid = (low + high) // 2
if nums[mid]<target:
low = mid+1
elif nums[mid]>target:
high = mid-1
else:
return mid#找到了
return high+1#可以理解为跳出循环时high跑到了low的位置上了
27. 移除元素
快慢指针
重点:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
if len(nums)==0:
return 0
l=0#慢指针
for f in range(0,len(nums)):#快指针
if(nums[f]!=val):
nums[l] = nums[f]
l = l+1
return l
26. 删除有序数组中的重复项
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
s = 0
res = []
for f in range(1,len(nums)):
if nums[f]!=nums[s]:
s = s+1
nums[s] = nums[f]
return len(nums[:s+1])
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
s = 0
for f in range(0,len(nums)):
if nums[f]!=0:
nums[s] = nums[f]
s += 1
while s<len(nums):
nums[s] = 0
s += 1
return nums