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

作者分享了个人在刷题提升编程能力的过程,强调了自制力的重要性。文章详细讨论了数组理论基础,特别是二分查找算法的应用和常见错误,以及在删除元素等操作中的细节处理。还提到了一些拓展题目,如搜索插入位置和移除元素的解决方案,并提供了相关链接供进一步学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来我是打算自行刷题的,但是奈何自制力太差,从三月份开始刷题到现在六月份了,才做了六十道题,进度太慢,因此还是选择了参加训练营。由于前面部分题目我刷过一次了,所以只要有时间拓展题目我也会做。

数组理论基础

  • 数组是存放在连续内存上的相同类型数据的集合(二维数组也连续),因此在增删数组元素时,牵一发而动全身
  • 数组中所谓的删除实际是覆盖

704.二分查找

这道题我是二刷,但是还是不妨碍我做错了。。。有几个重点:

  • 首先明确下面代码要用哪种区间:[左闭,右闭],或是 [左闭,右开)
  • 区间的开闭影响了while(循环条件)
  • 本次犯错的点在于:在判断nums[mid]target的大小时,mid下标的元素已经访问比较过了,因此在计算新区间时,应该把mid剔除!!!不要包括mid了。
  • 算中点时使用:int mid = left + (right - left)/2而不是(right + left)/2可以避免溢出

二分查找法的拓展题

  • 35.搜索插入位置:根据区间不同,注意最后插入的位置应该是left或是其他
  • 34.在排序数组中查找元素的第一个和最后一个位置:小心left和right在找到元素后往两边扩展的时候要设置left>=0right<=len-1;vector压入数据要用push_back(), stack压入数据用push()
  • 69.x的平方根:也可以用二分查找,但是注意在mid * mid 时,要防止溢出,因此要写成(long long)mid * mid
  • 367.有效的完全平方数:比69简单

27.移除元素

  • 暴力法思路很简单,但是也有细节要注意,比如覆盖了之后需要进行size--i--
  • 双指针法:我的思路和卡尔的是反的,我设置成了slow指针不等于val时,fast快指针给slow赋值,等于val时,快指针++;而卡尔始终是对fast快指针,当快指针不等于val时,赋值,当快指针等于val时++

拓展题

  • 26.删除有序数组中的重复项
  • 283.移动零
  • 844.比较含退格的字符串
  • 977.有序数组的平方
  • 同思路27

参考链接:

链接:
link
link
link

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值