当前位置: 首页 > news >正文

需要固定一个指针,再遍历另一个指针的都可以用双指针方法

对 👍,你理解得很对。

两数之和(Two Sum)这种问题里,外层确定一个数,内层要找另一个数,其实就可以用 双指针 来代替内层的遍历。

我给你举个最简单的例子:

问题

给定一个有序数组 nums = [1, 2, 3, 4, 6, 8],找出和为 7 的两个数。


方法 1:双重循环(O(n²))

nums = [1, 2, 3, 4, 6, 8]
target = 7for i in range(len(nums)):for j in range(i+1, len(nums)):if nums[i] + nums[j] == target:print(nums[i], nums[j])

输出:

3 4

方法 2:双指针(O(n))

因为数组有序,可以用双指针:

nums = [1, 2, 3, 4, 6, 8]
target = 7left, right = 0, len(nums) - 1  # 左右指针
while left < right:s = nums[left] + nums[right]if s == target:print(nums[left], nums[right])breakelif s < target:   # 和小了,左边右移left += 1else:              # 和大了,右边左移right -= 1

输出:

3 4

所以:

  • 两层循环是“i 定第一个数,j 遍历后面所有数”;

  • 双指针是“i 定第一个数,另一个直接用 left/right 搜索”。

👉 当你只需要两个数时,用双指针比两层循环更快。

要不要我帮你画一下这两个解法的“指针移动过程”,一步步对比?

http://www.xdnf.cn/news/1414441.html

相关文章:

  • 【系列11】端侧AI:构建与部署高效的本地化AI模型 第10章:LLM端侧部署
  • 二.Shell脚本编程
  • 在AlmaLinux或CentOS 8上编译安装ZLMediaKit流媒体服务器
  • CatBoost vs XGBoost:两大Boosting框架的全面对比
  • HTML5国庆网站源码
  • gdsfactory安装以及和klayout联调
  • 自学嵌入式第三十一天:Linux系统编程-进程间通信
  • 《程序员修炼之道》第七八九章读书笔记
  • Asible管理变量和事实和实施任务控制
  • 新手首次操作SEO核心要点
  • 深度学习周报(8.25~8.31)
  • 雪花算法生成分布式ID
  • C++ STL之哈希封装实现unordered_map/set
  • 第4章从一条记录说起-InnoDB记录结构
  • Redis六大常见命令详解:从set/get到过期策略的全方位解析
  • 如何用熵正则化控制注意力分数的分布
  • 【CVTE】C++开发 (提前批一面)
  • 【AI智能体】Dify 实现自然语言转SQL操作数据库实战详解
  • 【Spring】ApplicationListener监听器
  • 【芯片测试篇】:LIN总线
  • AI 赋能 Java 开发效率:全流程痛点解决与实践案例(一)
  • Linux/UNIX系统编程手册笔记:用户和组、进程凭证、时间以及系统限制和选项
  • 利用DeepSeek编写验证xlsx格式文件中是否启用sharedStrings.xml对读写效率影响python程序
  • DRF快速构建RESTful API指南
  • redis详解 (最开始写博客是写redis 纪念日在写一篇redis)
  • C++内存序不迷茫:从CPU缓存一致性理解Memory Order
  • Wi-Fi技术——初识
  • 如何绕过 disable-devtool.js 打开控制台
  • C语言中如何使用NULL
  • 配置 Kubernetes Master 节点不可调度的标准方法