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

相关推荐
米粒116 分钟前
力扣算法刷题 Day 62 最短路算法
算法·leetcode·职场和发展
时空自由民.23 分钟前
三个按键的,短按1S,长按3S,单击,双击,三击的检测程序
大数据·数据库·计算机网络·算法
dog25027 分钟前
圆锥曲线命题的定义和证明
网络·算法·php
IT猿手38 分钟前
光伏模型参数估计:山羊优化算法(Goat Optimization Algorithm, GOA)求解光伏模型参数辨识问题,免费提供完整MATLAB代码链接
开发语言·算法·matlab·智能优化算法·光伏模型参数估计·光伏模型参数辨识·最新群智能算法
嵌入式小企鹅1 小时前
大模型算法工程师面试宝典
人工智能·学习·算法·面试·职场和发展·大模型·面经
我不是懒洋洋1 小时前
手写一个并查集:从原理到最小生成树实战
c语言·c++·经验分享·算法
图码1 小时前
一文搞懂如何判断字符串是否为Pangram(全字母句)
数据结构·算法·网络安全·数字雕刻·ping++
khalil10201 小时前
代码随想录算法训练营Day-43 动态规划10 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
数据结构·c++·算法·leetcode·动态规划·子序列问题
AIpanda8882 小时前
数字员工助推AI销冠系统和AI提效软件系统,实现企业智能化转型与运营效率提升
算法
2401_897190552 小时前
【C++高阶系列】告别内查找局限:基于磁盘 I/O 视角的 B 树深度剖析与 C++ 泛型实现!
java·c++·算法