LeetCode刷题笔记:二分查找与移除元素算法解析
需积分: 0 75 浏览量
更新于2024-08-03
收藏 2KB MD 举报
本文是关于LeetCode算法题目的刷题笔记,涵盖了704.二分查找和27.移除元素两道题目,旨在帮助学习算法和数据结构的程序员或学生提升编程能力。
在704.二分查找题目中,给定一个有序整型数组`nums`和目标值`target`,任务是找到`target`在数组中的下标,如果不存在则返回-1。此题的核心是利用二分查找算法。二分查找的基本思想是每次比较中间元素与目标值,根据比较结果缩小查找范围。具体步骤如下:
1. 初始化左边界`left`为0,右边界`right`为数组长度减1。
2. 当`left <= right`时,执行以下操作:
- 计算中间索引`middle = (left + right) / 2`。
- 比较`nums[middle]`与`target`:
- 如果`nums[middle] > target`,说明目标值在左半部分,更新`right = middle - 1`。
- 如果`nums[middle] < target`,说明目标值在右半部分,更新`left = middle + 1`。
- 如果`nums[middle] == target`,找到了目标值,返回`middle`。
3. 如果循环结束仍未找到目标值,返回-1。
提供的Java参考代码展示了如何实现这个算法,通过不断调整左右边界,直到找到目标值或确定其不存在。
在27.移除元素的题目中,要求在原地移除数组`nums`中所有值等于`val`的元素,并返回新的长度。这里的关键是利用双指针法。具体做法如下:
1. 初始化两个指针,`slow`和`fast`,都从数组的起始位置开始。
2. 当`fast`指针未到达数组末尾时,执行以下操作:
- 若`nums[fast] != val`,则将`nums[slow]`更新为`nums[fast]`,并将`slow`指针向右移动一位,保持数组的有效元素顺序。
- 无论`nums[fast]`是否等于`val`,都将`fast`指针向右移动一位,继续检查下一个元素。
3. 执行完上述步骤后,`slow`指针所指向的位置就是新数组的末尾,返回`slow`作为新的数组长度。
通过这种方式,我们可以在不使用额外空间的情况下原地修改数组,跳过了所有值为`val`的元素,使得有效元素紧凑排列在数组前面。
这两道题目的解决策略都是针对特定问题设计的高效算法:二分查找利用了有序数组的特性,而双指针法则巧妙地解决了原地修改数组的问题。在学习和实践中,读者应重点理解和掌握这两种算法的思想,以便在未来遇到类似问题时能够灵活应用。
2021-11-23 上传
2021-07-05 上传
2023-09-07 上传
2023-07-26 上传
2023-06-13 上传
2024-01-10 上传
2023-08-15 上传
2023-10-07 上传
2024-01-12 上传
码农阿祖
- 粉丝: 590
- 资源: 4
最新资源
- Postman安装与功能详解:适用于API测试与HTTP请求
- Dart打造简易Web服务器教程:simple-server-dart
- FFmpeg 4.4 快速搭建与环境变量配置教程
- 牛顿井在围棋中的应用:利用牛顿多项式求根技术
- SpringBoot结合MySQL实现MQTT消息持久化教程
- C语言实现水仙花数输出方法详解
- Avatar_Utils库1.0.10版本发布,Python开发者必备工具
- Python爬虫实现漫画榜单数据处理与可视化分析
- 解压缩教材程序文件的正确方法
- 快速搭建Spring Boot Web项目实战指南
- Avatar Utils 1.8.1 工具包的安装与使用指南
- GatewayWorker扩展包压缩文件的下载与使用指南
- 实现饮食目标的开源Visual Basic编码程序
- 打造个性化O'RLY动物封面生成器
- Avatar_Utils库打包文件安装与使用指南
- Python端口扫描工具的设计与实现要点解析