提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
努力刷题,从己做起。
一、二分查找
最重要的是理解左闭右开的right=middle问题,以及起初的right=numsize。重点理解数组中所有的元素均要被覆盖(假如数组长度为3,下标为0,1,2;此时左闭右开下的left也可取为2,即right=3)。
代码如下(示例):
class Solution(object):
def search(self, nums:List[int], target: int) -> int:
left, right = 0, len(nums) #定义target在左闭右开的区间里,即[left,right)
while left < right:
middle = left + (right - left) // 2 #保证int不出界,实际无需考虑,因为python可自动变化
if nums[middle] > target:
right = middle
elif nums[middle] < target:
left = middle + 1
else:
return middle
return -1
二、移除元素
双指针法
代码如下(示例):
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
fast, slow = 0, 0
size = len(nums)
while fast < size:
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
总结
以上就是今天所学内容,该文仅仅根据个人理解重点记录了二分查找的节点问题。