704. 二分查找
思路
- 判断能否使用二分法:有序数组,且数组中无重复元素 可以使用
- target区间定义:常见的为两种,左闭右闭即[left, right] (代码例),左闭右开即[left, right)
代码
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1
while left <= right: #使用 <= ,因为left == right是有意义的
middle = (left + right) // 2
if nums[middle] > target:
#当前这个nums[middle]一定不是target,
#那么接下来要查找的下标位置就是 middle - 1
right = middle - 1
elif nums[middle] < target:
left = middle + 1
else:
return middle
return -1
27. 移除元素
思路
数组的性质
- 数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖
- 数组某个元素删除,内存还是原来的大小
暴力解法
两层for循环:一个for循环遍历数组元素进行查找 ,第二个for循环更新数组(把后面的元素都往前移)
双指针法
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:新数组下标的位置
代码
def removeElement(self, nums: List[int], val: int) -> int:
slow = 0
for fast in range(len(nums)):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
return slow
每日总结
- 之前总是在第一天就完不成计划,导致后面越差越多,然后半途而废,这次加入了训练营,起码第一天完成了任务,也算开了个好头,再接再厉
- 感觉自己对于基础知识(尤其是底层原理)的掌握还远远不够,这次刷题的机会一定要好好把握,把欠缺的知识补一补