代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

704. 二分查找

题目链接
文章讲解
视频讲解

思路

  1. 判断能否使用二分法:有序数组,且数组中无重复元素 可以使用
  2. 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. 移除元素

题目链接
文章讲解
视频讲解

思路

数组的性质

  1. 数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖
  2. 数组某个元素删除,内存还是原来的大小

暴力解法

两层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

每日总结

  1. 之前总是在第一天就完不成计划,导致后面越差越多,然后半途而废,这次加入了训练营,起码第一天完成了任务,也算开了个好头,再接再厉
  2. 感觉自己对于基础知识(尤其是底层原理)的掌握还远远不够,这次刷题的机会一定要好好把握,把欠缺的知识补一补
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值