704. 二分查找、27. 移除元素。

 

自从大四考研上岸后就再也没有碰过算法了,想了很久,决定跟代码随想录刷一遍算法基础。重新开启算法之路!!!代码随想录

2023年11月29日

day1:二分查找

第一天任务还是比较轻松的,对于查找算法,在备战考研(915)期间,对各种排序、查找算法代码烂熟于心,不过上岸后也没再回顾过了,趁此机会做简单的复习。

二分查找:本身算法思路很简单,但确实存在细节错误,关于取'>'还是'>=',也就是等号该不该取,这个问题也是当初看各种查找算法、排序算法时遇到的问题,每次都是大体思路知道,但不知道等号该不该取,都是做一遍假设推算,决定是否带等号。因此代码随想录中的关于该问题的讲解对我的帮助很大的。

1.while(left<=right)

首先就是可以取等号,也就是存在left=right的情况,因此,从数学角度来说,查找区间是闭区间,对应每次更新left,right都要考虑往两侧移动一位。因为区间端点已经判断过了。

2.while(left<right)

其次就是不能取等号,也就是不存在left=right的情况,查找区间为左闭右开区间,因此再更新mid时候,就要考虑到right。

该算法应该并没有其他需要注意的地方了。

day1:移除元素

同样在考研备战数据结构时候对于该操作已经烂熟于心,各种情况的删除(带哨兵,不带哨兵,这些好像是查找的。。。思想差不多)

看到该题直观感受就是遍历呗,找到目标值,再遍历删除呗,但时间复杂度就高了,我们算法讲究的是效率!因此有了进阶方法----双指针;该方法在考研期间已经通过代码随想录了解到了。不过有些忘了实现原理。借此机会复习回顾。

双指针:我的理解就是将暴力算法中的两次for循环放在一个循环中实现,两个指针各代表了一次for。慢指针代表了最终返回的数组,也就是暴力法中内层for更新后的结果。快指针是查找target的,也就是暴力法中的外层for,

因此主体还是通过快指针遍历数组,找target,如果快指针不等于target,则将快指针的值赋给慢指针,并且慢指针++,因为我们最终返回的是慢指针代表的数组。快指针随遍历而递进,如果快指针==target,此时就不能将他赋给慢指针了,直接跳过,即快指针比慢指针多往前了一步,这也是为什么叫快慢指针的原因吧。最后直到快指针遍历完数组,此时快指针在尾部,而慢指针会在原数组中间某个位置,两者之间存在距离,这个距离就是因为遇到target,慢指针不懂,快指针走一步,因此距离就代表了原数组后有多少个target值,而慢指针代表的缩短的数组就是将target删除后的数组(每遇到非target都会赋值给慢指针)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值