代码随想录算法训练营第一天| 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数组第一个元素不是要删除元素的情况,虽然有点冗余计算,但代码逻辑比较简单。

相关推荐
掘金安东尼1 小时前
Amazon Lambda + API Gateway 实战,无服务器架构入门
算法·架构
码流之上2 小时前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
快手技术4 小时前
快手提出端到端生成式搜索框架 OneSearch,让搜索“一步到位”!
算法
CoovallyAIHub1 天前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP1 天前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo1 天前
半开区间和开区间的两个二分模版
算法
moonlifesudo1 天前
300:最长递增子序列
算法
CoovallyAIHub1 天前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI2 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm