发布时间:2026/8/8 3:49:55
双指针算法解决有序数组两数之和问题 1. 题目解析与核心思路167题是经典两数之和问题的变种题目给定一个已按非递减顺序排列的整数数组numbers和一个目标值target。要求找出两个数使它们相加之和等于目标数并返回这两个数的下标下标从1开始。与原始两数之和问题相比这个变种的关键差异在于输入数组已经有序非递减顺序要求返回的下标从1开始计数保证有且仅有一个解1.1 暴力解法分析最直观的解法是双重循环暴力枚举for i in range(len(numbers)): for j in range(i1, len(numbers)): if numbers[i] numbers[j] target: return [i1, j1]时间复杂度O(n²)空间复杂度O(1)。虽然能通过但显然没有利用数组有序的特性。1.2 哈希表解法优化借鉴原始两数之和的哈希表解法hashmap {} for i, num in enumerate(numbers): complement target - num if complement in hashmap: return [hashmap[complement]1, i1] hashmap[num] i时间复杂度O(n)空间复杂度O(n)。比暴力解法优化但仍未充分利用数组有序的特性。2. 双指针算法详解针对有序数组的特性双指针算法是最优解2.1 算法原理初始化左右指针left0, rightlen(numbers)-1计算当前和current_sum numbers[left] numbers[right]比较current_sum与target等于target返回[left1, right1]小于targetleft右移增大和大于targetright左移减小和重复直到找到解2.2 Python实现def twoSum(numbers, target): left, right 0, len(numbers) - 1 while left right: current_sum numbers[left] numbers[right] if current_sum target: return [left 1, right 1] elif current_sum target: left 1 else: right - 1 return [-1, -1] # 题目保证有解这行不会执行2.3 复杂度分析时间复杂度O(n)最坏情况下遍历整个数组一次空间复杂度O(1)只使用了常数个额外空间3. 算法正确性证明双指针算法的正确性基于以下数学原理单调性保证数组有序意味着固定leftnumbers[right]是能与numbers[left]配对的最大值固定rightnumbers[left]是能与numbers[right]配对的最小值搜索空间缩减当numbers[left]numbers[right]target时对于leftleftnumbers[left]numbers[right]必定也小于target当numbers[left]numbers[right]target时对于rightrightnumbers[left]numbers[right]必定也大于target这种性质确保了我们可以安全地移动指针而不会错过解。4. 边界条件与测试用例4.1 典型测试用例# 常规情况 assert twoSum([2,7,11,15], 9) [1,2] # 解在数组两端 assert twoSum([-1,0,3,5,9,12], 11) [3,5] # 包含重复元素 assert twoSum([1,2,2,3], 4) [2,3] # 最小规模数组 assert twoSum([1,2], 3) [1,2]4.2 特殊注意事项下标从1开始返回时需要1不要使用相同的元素两次while条件是leftright而非leftright题目保证有解无需处理无解情况5. 算法优化与变种5.1 提前终止优化当numbers[left] target/2时可以提前终止while left right: if numbers[left] target / 2: break # 原逻辑...5.2 二分查找结合可以在移动指针时结合二分查找快速定位elif current_sum target: # 在[left1, right]区间二分查找target-numbers[right] left bisect.bisect_left(numbers, target-numbers[right], left1, right1) - 15.3 多解情况处理如果题目允许/要求返回所有解result [] while left right: current_sum numbers[left] numbers[right] if current_sum target: result.append([left1, right1]) # 处理重复元素 while left right and numbers[left] numbers[left1]: left 1 while left right and numbers[right] numbers[right-1]: right - 1 left 1 right - 1 elif current_sum target: left 1 else: right - 1 return result6. 同类题目延伸掌握双指针技巧后可以解决许多类似问题三数之和LeetCode 15最接近的三数之和LeetCode 16盛最多水的容器LeetCode 11验证回文串LeetCode 125合并两个有序数组LeetCode 88这类问题的共同特点是都利用了有序数组的特性通过指针移动来高效搜索解空间。7. 实际工程应用双指针算法在实际工程中有广泛应用场景数据库查询优化合并两个有序结果集版本控制系统比较两个版本的文件差异大数据处理合并多个有序数据流游戏开发碰撞检测中的空间分区优化理解这类算法不仅能帮助通过面试更能提升解决实际工程问题的能力。我在处理日志合并任务时就曾应用类似的技巧将处理时间从O(n²)优化到O(n)。

相关新闻

2026/8/8 3:49:55

适配器实现闭环控制

adapter.py 文件是翻译器 v0.2 的顶层集成与协调模块,它作为“效果层”与“关系层”之间的桥接适配器,将 triple_store.py、mapping_engine.py 和 safety_gate.py 三个核心组件串联起来,形成一个完整的“观测-决策-执行-学习”数据闭环 。 核…

2026/8/8 3:49:55

SQL Server内存数据库优化与高并发实战

1. 为什么SQL Server需要内存数据库方案 在电商大促、秒杀活动、金融交易结算等典型高并发场景中,传统基于磁盘的SQL Server数据库经常面临性能瓶颈。我曾参与过一个省级医保结算系统的性能优化,在业务高峰期TPS(每秒事务数)从150…

2026/8/8 3:44:55

组合逻辑电路实战指南:从逻辑门到STM32编码器与跨时钟域设计

1. 项目概述:为什么你需要这篇组合逻辑电路指南如果你正在学习电子工程、计算机科学,或者是一名嵌入式开发者、硬件爱好者,那么“数字电路”和“组合逻辑电路”这两个词对你来说一定不陌生。它们构成了现代所有数字系统的基石,从你…

2026/8/8 6:10:02

AI辅助Python爬虫实战:天眼查数据采集入门

1. 项目概述:AI辅助下的Python爬虫入门实战去年帮一位做企业征信分析的朋友处理数据时,我意识到天眼查这类商业信息平台的数据采集需求远比想象中普遍。但传统爬虫开发需要面对反爬机制、页面解析等复杂问题,对新手极不友好。最近测试了几款A…

2026/8/8 6:10:02

AI Agent安全架构:从提示词注入到纵深防御的实战指南

1. 从“智能助手”到“自主行动者”:AI Agent的演进与安全新边界最近和几个做企业级应用开发的朋友聊天,大家不约而同地都在讨论一个词:AI Agent。这不再是去年那种“调个API做个聊天机器人”的初级玩法了,而是开始真正尝试让AI去…

2026/8/8 6:10:02

RabbitMQ本地消息表实现分布式事务最终一致性

1. 项目概述RabbitMQ作为企业级消息中间件的标杆产品,在分布式系统中扮演着重要角色。可靠消息最终一致性是分布式事务处理的经典难题,而本地消息表方案则是经过大量生产验证的成熟解决方案。我在金融支付系统架构设计中,曾多次采用这种模式解…

2026/8/8 6:10:02

散货港口智能优化:状态监测与群智能算法实践

1. 散货港口运行优化的现状与挑战散货港口作为全球贸易的重要节点,每天需要处理数以万吨计的煤炭、矿石、谷物等散装货物。传统港口运营模式面临着诸多痛点:设备故障频发导致作业中断、堆场利用率低下、装卸效率不稳定、能耗居高不下等。这些问题直接影响…

2026/8/8 6:10:02

JavaScript全栈性能优化实战指南

1. JavaScript全栈性能优化实战指南作为一名长期奋战在一线的全栈开发者,我深知性能优化是贯穿整个开发周期的核心命题。不同于单纯的客户端或服务端优化,全栈性能优化需要我们从浏览器到数据库建立完整的性能认知体系。本文将分享我在多个百万级PV项目中…

2026/8/8 6:05:02

AI Agent工程化实践:从Claude Code到可协作智能体团队的架构设计

1. 项目概述:从“玩具”到“工程”的跨越最近和几个做AI应用开发的朋友聊天,大家都有一个共同的感受:Claude Code这玩意儿,单点用起来是真爽,写个函数、修个bug、生成点样板代码,效率提升肉眼可见。但一旦想…

2026/8/7 19:43:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/8 0:04:22

Java图像处理实战指南

要执行这些 Java AWT 图像处理程序,你需要将它们分别保存为独立的 .java 文件,并使用 javac 编译,然后使用 java 运行。以下是每个程序的核心执行步骤、依赖关系和要点。 通用执行步骤 保存文件:将每个 listing 的代码复制到文本…

2026/8/8 0:04:23

昇腾AI代理实现多号通话自动化

基于昇腾(Ascend)硬件与AtomGit AI社区的开源生态,结合AI Agent技术,可以实现一个模拟“通话重复使用机号复制”功能的安卓手机应用原型。其核心是利用AI Agent进行意图理解、任务编排和自动化操作,模拟或管理多号码的…

2026/8/8 0:04:23

2026年Graph+AI Agents最新创新思路

本次围绕GraphAI Agents这个方向筛选了15篇高质量论文,都是近年来具有较高引用价值或方法创新的研究工作,其中部分来自IJCAI、AAAI、ICRA。 对于论文er来说,这些论文方法结构清晰、可复现性较强,在多个任务上都有可延展的空间。如…

2026/8/7 9:44:18

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/7 19:03:32

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/8 2:17:42

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…