代码随想录训练营-1day:二分查找、移除元素

一、二分查找

基础知识点:主要是熟悉数组的知识点,数组是顺序排列的存储单元,针对数组的操作,查询,插入,删除。具体可参考:代码随想录

学习二分查找方法,要点是left right区间闭合情况,两个方法:分别是左闭右闭,左闭右开。

1 左闭右闭时候,每一次遍历后,如果target 小于nums[middle],区间就缩小到[left, middle - 1](因为闭合区间,middle对应值已经比较过了,下一次一定不会等于这个值),对应的,如果target大于nums[middle],那么区间就是[middle + 1, right]。

2 左闭右开时候,首先不同的点初始化,right = size(此时是开区间,因此size作为索引,上面的闭区间,需要用size -1),不同的点就是,如果target 小于nums[middle],区间就缩小到[left, middle),target 大于nums[middle],区间就缩小到[midle + 1, right)。

以下是LeetCode上面解法:

解题过程中,mid计算时候,由于没有考虑到计算运算符的优先级,导致运行超时!(需要注意)

二、移除元素

1 尝试暴力解法,考虑的是使用2个for循环,第一个for循环,遍历数组,index =0开始,如果碰到target值,那么停下,从下一个元素开始继续遍历到size,往前移动元素,覆盖target位置,结束后,第一次循环的i需要往前一位,size也减少一个。

2 双指针法:学习代码随想录上面的思路,使用快慢指针,遍历fast指针,当target不等于nums[fast]时候,slow和fast同步加1,nums[fast]赋值给nums[slow];当相等时候,fast指向下一个元素了,此时slow并没有加1,如果下一个元素不是target,那么赋值给nums[slow]。  

   另外,还有一种思路,题目说元素的位置可以不考虑,从左开始遍历,找到第一个等于target的位置,从右往左开始遍历,找到第一个不是target的位置,然后,两个区间内,把不是target的值和等于target的值对换,这样完成一次覆盖,直到left<=right。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值