news 2026/5/28 9:36:26

6.LeetCode 剑指Offer 57 和为s的两个数,暴力到双指针法!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6.LeetCode 剑指Offer 57 和为s的两个数,暴力到双指针法!

目录

题目解析

算法原理(暴力 vs 双指针)

解法一:暴力枚举(O(n²))—— 适合小数据,但别用在LeetCode上!

解法二:双指针法(O(n))—— 本题最优解!

编写代码(Java版)

LeetCode提交版(变量名用price)

总结 & 心得(大二生的碎碎念)

OJ链接:LeetCode 剑指Offer 57. 和为s的两个数


作为一名大二计算机学生,最近在刷LeetCode热题,今天刚啃完剑指Offer 57. 和为s的两个数,从暴力枚举到双指针优化,今天把我的理解+笔记全部分享出来


题目解析

先看题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

示例1:

输入:nums = [2,7,11,15], target = 9

输出:[2,7]或者[7,2]

示例2:

输入:nums = [10,26,30,31,47,60], target = 40

输出:[10,30]或者[30,10]

限制:

  • 1 <= nums.length <= 10^5

  • 1 <= nums[i] <= 10^6


算法原理(暴力 vs 双指针)

刚开始我第一反应是暴力枚举:两层for循环,枚举所有两个数的组合,看和是否等于target。但这样时间复杂度是O(n²),对于10^5的数据量肯定超时!

后来看到“递增排序”这个关键词,瞬间想到双指针法!因为数组有序,我们可以用两个指针从两端往中间夹,根据当前和与target的大小关系来移动指针,时间复杂度直接降到O(n)

解法一:暴力枚举(O(n²))—— 适合小数据,但别用在LeetCode上!

代码思路:

for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (nums[i] + nums[j] == target) return ...; } }

解法二:双指针法(O(n))—— 本题最优解!

核心思想:利用数组单调递增的性质,用左指针left指向开头,右指针right指向末尾,计算sum = nums[left] + nums[right]

  • 如果sum > target→ 说明右边太大,右指针左移right--

  • 如果sum < target→ 说明左边太小,左指针右移left++

  • 如果sum == target→ 找到答案,返回!


编写代码(Java版)

LeetCode提交版(变量名用price)

class Solution { public int[] twoSum(int[] price, int target) { int left = 0, right = price.length - 1; while (left < right) { int sum = price[left] + price[right]; if (sum > target) { right--; } else if (sum < target) { left++; } else { return new int[]{price[left], price[right]}; } } // 照顾编译器 return new int[]{0}; } }

总结 & 心得(大二生的碎碎念)

做完这道题,我最大的收获是:一定要关注题目中的“隐藏条件”!比如这里的“递增排序”,就是双指针法的灵魂。如果没有这个条件,双指针可能就不适用了(比如乱序数组还得用哈希表)。

另外,暴力枚举虽然简单,但在数据量大时绝对会超时,所以算法优化真的很重要!从O(n²)到O(n),虽然只是换了个思路,但效率提升了一个量级,这就是算法的魅力吧~


OJ链接:LeetCode 剑指Offer 57. 和为s的两个数

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 9:34:49

如何在5分钟内上手e5-small-v2?零代码实现文本相似度计算

如何在5分钟内上手e5-small-v2&#xff1f;零代码实现文本相似度计算 【免费下载链接】e5-small-v2 项目地址: https://ai.gitcode.com/hf_mirrors/zhouhui/e5-small-v2 e5-small-v2是一款强大的文本相似度计算模型&#xff0c;基于Sentence Transformers架构&#xff…

作者头像 李华
网站建设 2026/5/28 9:34:31

仅需9小时!在A100上训练TinyLLama-v0-openmind的超详细教程

仅需9小时&#xff01;在A100上训练TinyLLama-v0-openmind的超详细教程 【免费下载链接】TinyLLama-v0-openmind 项目地址: https://ai.gitcode.com/hf_mirrors/jeffding/TinyLLama-v0-openmind TinyLLama-v0-openmind是一款轻量级开源语言模型&#xff0c;通过优化设计…

作者头像 李华
网站建设 2026/5/28 9:33:30

基于单片机的智能伞设计(有完整资料)

编号&#xff1a;T2942402M设计简介&#xff1a;本设计是基于单片机的智能伞设计&#xff0c;主要实现以下功能&#xff1a;通过温湿度传感器检测环境温湿度&#xff0c;当温度低于阈值并且湿度超过阈值&#xff0c;自动打开雨伞通过光照检测光照强度&#xff0c;当光照强度超过…

作者头像 李华
网站建设 2026/5/28 9:31:14

金山软件2026年Q1财报出炉:总收入24.17亿,办公与游戏业务各有亮点

金山软件Q1财报&#xff1a;营收利润双丰收 金山软件正式公布2026年第一季度财报&#xff0c;集团总收入达24.17亿元&#xff0c;经营利润为3.95亿元&#xff0c;归母净利润高达10.91亿元。这一成绩显示出金山软件在该季度的良好运营态势。 办公软件业务&#xff1a;核心业务全…

作者头像 李华