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

704.二分查找

文档讲解: 代码随想录

视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

  1. 第一想到的算法就是遍历数组判断是否等于要查找的元素,学习到一些编程技巧后知道用二分查找效率更高。

  2. 对区间的明确定义可以让逻辑更加清晰,闭区间就是可以取到的,开区间就是不能取到的,开区间不能取到所以用左闭右开时right要设置为nums.length,也就是要多一位,左闭右闭就不用多一位。同样的逻辑也可以用在计算完middle更新left或right那里, 用左闭右开时更新right时就不用减去1,因为取不到,用左闭右闭就需要减去1。

  3. 开区间不能取到所以用左闭右开时right要设置为nums.length,也就是要多一位。同样的逻辑也可以用在计算完middle更新left或right那里, 用左闭右开时更新right时就不用减去1,因为取不到。

4.明确了区间定义后实现起来就容易多了,降低了想的难度,学习了一个小时。

27.移除元素

文档讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

  1. 第一想到的算法就是形象地想从数组中直接将这个元素清除,有点和打麻将拿出一张牌有点像,需要移动后面的元素。

  2. 首先是暴力解法,就是遍历到要删除的元素然后将后续的元素依次向前移动覆盖。然后是双指针解法,理解双指针在这个题中的定义非常重要,快指针是遍历旧数组的指针,慢指针是新数组的指针,只需要快指针循环一次,就可以完成暴力解法两层的循环,开始时快慢指针在同一个位置,如果fast指针所指元素是要删除的元素,fast指针继续移动,slow指针不懂,移动后如果fast指针所指元素不是要删除的元素,则对slow指针所指的位置赋值为fast指针所指的值,slow指针移动, fast指针继续移动,直到遍历到末尾结束,slow指针对应新数组长度。

  3. 暴力实现最开始用的是for循环,测试用例报错,原因在于用for循环遍历到要删除的位置,然后内层循环后续的元素向前依次移动,这个时候外层循环指向的位置可能仍然是需要删除的元素,但外层for循环已经去到了下一个位置,看了卡哥代码,是将外层循环的指针回退了一位,我用的while循环感觉逻辑更清晰。用双指针方法最开始没有理解双指针在这个题中的定义,导致写出了两层循环,代码反而更复杂,然后如果fast指针所指元素不是要删除的元素,则对slow指针所指的位置赋值为fast指针所指的值,slow指针移动, fast指针继续移动,这个逻辑也能处理nums数组第一个元素不是要删除元素的情况,虽然有点冗余计算,但代码逻辑比较简单。

相关推荐
2401_8914821741 分钟前
多平台UI框架C++开发
开发语言·c++·算法
88号技师1 小时前
2026年3月中科院一区SCI-贝塞尔曲线优化算法Bezier curve-based optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
t198751281 小时前
三维点云最小二乘拟合MATLAB程序
开发语言·算法·matlab
x_xbx2 小时前
LeetCode:148. 排序链表
算法·leetcode·链表
Darkwanderor2 小时前
三分算法的简单应用
c++·算法·三分法·三分算法
2401_831920742 小时前
分布式系统安全通信
开发语言·c++·算法
WolfGang0073212 小时前
代码随想录算法训练营 Day17 | 二叉树 part07
算法
温九味闻醉2 小时前
关于腾讯广告算法大赛2025项目分析1 - dataset.py
人工智能·算法·机器学习
炽烈小老头3 小时前
【 每天学习一点算法 2026/03/23】数组中的第K个最大元素
学习·算法·排序算法
老鱼说AI3 小时前
大规模并发处理器程序设计(PMPP)讲解(CUDA架构):第四期:计算架构与调度
c语言·深度学习·算法·架构·cuda