3Sum — 暴力 O(n³) 到双指针 O(n²),AI 是怎么把三层循环砍成两层的?
读完本文你将了解3Sum 的暴力→优化→最优完整演进 | 双指针模式为什么是「降复杂度」的本质 | Uber 拼车配对的真实场景 题目原题给你一个整数数组nums返回所有和为 0 的不重复三元组[nums[i], nums[j], nums[k]]i ≠ j ≠ k。项目说明输入nums [-1, 0, 1, 2, -1, -4]输出[[-1,-1,2],[-1,0,1]]约束0 ≤ nums.length ≤ 3000-10⁵ ≤ nums[i] ≤ 10⁵不能返回重复三元组 先问一个问题如果你问 ChatGPT「怎么找三个数加起来等于 0」它大概率不会想「双指针」——第一反应跟大多数人一样三个 for 循环。这不是 AI 笨是问题形态太像「枚举所有组合」了。真正让它和人类一起卡住的不是找三数之和而是去重——你怎么确保不会返回两个一模一样的 [-1, 0, 1] 第一版AI 的朴素解法defthree_sum(nums):nlen(nums)resultset()foriinrange(n):forjinrange(i1,n):forkinrange(j1,n):ifnums[i]nums[j]nums[k]0:result.add(tuple(sorted([nums[i],nums[j],nums[k]])))return[list(t)fortinresult]时间 O(n³)空间 O(k)。1000 个元素就有 1.6 亿次三元组检查10000 个元素就是 160 亿次——直接超时。set 去重是事后补救先把所有组合算出来再去重等于把暴力放大再压缩纯浪费。 AI 的自我优化链第 1 次优化从「枚举三数」变成「枚举两数第三数 -a-b」固定前两个数 a、b第三个数 c -(ab)。用哈希表查 c 是否存在把 O(n³) 降到 O(n²) 平均。但去重还是要 set而且哈希表查找有常数开销实际并不快。第 2 次优化排序 双指针最优解排序后固定第一个数 nums[i]剩下用左右双指针在 nums[i1:] 上找 nums[left] nums[right] -nums[i]。和大了 right 左移和小了 left 右移。一轮 while 就解决了原本两层循环的工作。第 3 次优化排序天然去重排序带来的副产品——相同值相邻。跳过连续重复的 nums[i]、nums[left]、nums[right]不再需要 set。这才是这题真正难的地方去重不是额外步骤而是排序的副产品。暴力三重循环O(n³)哈希表找第三数O(n²) 平均排序 双指针O(n²) 稳定排序天然去重无需 set Python 实现defthree_sum(nums):nums.sort()nlen(nums)result[]foriinrange(n):ifnums[i]0:break# 排序后第一个数已 0后面不可能凑成 0ifi0andnums[i]nums[i-1]:continue# 跳过重复的第一个数left,righti1,n-1whileleftright:totalnums[i]nums[left]nums[right]iftotal0:left1eliftotal0:right-1else:result.append([nums[i],nums[left],nums[right]])whileleftrightandnums[left]nums[left1]:left1whileleftrightandnums[right]nums[right-1]:right-1left1right-1returnresult☕ Java 实现importjava.util.*;publicclassSolution{publicListListIntegerthreeSum(int[]nums){Arrays.sort(nums);ListListIntegerresultnewArrayList();intnnums.length;for(inti0;in;i){if(nums[i]0)break;if(i0nums[i]nums[i-1])continue;intlefti1,rightn-1;while(leftright){inttotalnums[i]nums[left]nums[right];if(total0){left;}elseif(total0){right--;}else{result.add(Arrays.asList(nums[i],nums[left],nums[right]));while(leftrightnums[left]nums[left1])left;while(leftrightnums[right]nums[right-1])right--;left;right--;}}}returnresult;}}两版代码放一起读者自己对比 Java 和 Python 在排序、边界、结果存储上的差异——比你讲十句都有用。 算法模式拆解双指针模式定义排序后的数组上用一个左指针和一个右指针从两端向中间逼近根据当前值的目标关系决定移动哪一边。适用信号数组/列表求两数之和、三数之和、最接近的值有序或可排序的数据需要「不重复」的组合核心逻辑每轮循环只移动一个指针所以内层是 O(n)。外层枚举第一个数是 O(n)总复杂度 O(n²)。排序后数组-4,-1,-1,0,1,2固定 i-1 (第1个)left-1, right2和-42-2 0left 右移-121 0right 左移-110 ✅记录 [-1,-1,2]left, right--重复此过程...和哈希表方案的对比维度哈希表排序双指针时间O(n²) 平均常数大O(n²) 稳定常数小空间O(n) 哈希表O(1)不计结果去重需要 set事后再处理排序天然去重同步跳过面试评分60 分90 分哈希表方案的问题是它只解决了「找不找得到」没解决「怎么不重复」。排序方案把去重变成了数据结构层面的免费午餐。️ 真实产品场景Uber 三人拼车Uber 拼车系统中有一个经典子问题给定 N 个乘客的实时位置和需求时间窗口找出所有可以同时匹配三人的拼车组合。具体化每个乘客有一个「出发时间偏移值」正数晚出发负数早出发系统需要找到三个乘客出发时间偏差之和等于 0时间窗口完全对齐。这就是 3Sum 的翻版——数组元素是乘客时间偏移找和为 0 的三元组且同一个乘客不能被匹配两次。排序 双指针的优势N10000 时暴力是 O(n³)≈1000亿次双指针是 O(n²)≈1亿次。在拼车系统的实时性要求下这 10000 倍的差距直接决定用户能不能在合理时间内等到车。✅ 面试官的点评通过标准写出排序 双指针 O(n²)正确处理三层去重外层跳重 内层左右双跳重时间 O(n²) 空间 O(1)不计结果加分项nums[i] 0提前 break 的剪枝能说明为什么「排序」是去重的关键——这题的本质不是算法是数据结构设计能推广到 K-SumK4,5…常见踩坑只在外层跳重忘了内层双指针也跳重——返回结果里还是会有重复三元组没做nums[i] 0剪枝——对大数据输入性能退化严重Java 版用new ArrayList(Arrays.asList(...))包裹因为Arrays.asList返回的列表不可修改 同类题推荐题目难度一句话思路Two Sum (LC 1)Easy排序双指针或哈希表4Sum (LC 18)Medium3Sum 外层套一层循环最接近的三数之和 (LC 16)Medium3Sum 改找最接近 target接雨水 (LC 42)Hard双指针取矮边进水量来源说明✅ 已验证LeetCode 15 官方题解 AI 实测 文档/论文《算法导论》第 4 章分治策略

相关新闻

基于微信小程序的美食画像平台设计与实现

基于微信小程序的美食画像平台设计与实现

一、课题研究背景与意义 (一)研究背景 随着移动互联网与本地生活服务行业的高速发展,美食消费、美食探店、饮食分享已成为大众日常生活的重要组成部分。当前美团、大众点评等主流美食平台以商家入驻、榜单推荐、团购消费为核心,服…

2026/8/26 9:17:19 阅读更多 →
职场英语学习计划Day040

职场英语学习计划Day040

🌟计划1:📅学习时间:2026.8.7 周五学习内容:English at Work Episode 39: A step too far Disciplining a member of staff▶ new recruit 新员工▶ make life difficult for sb. 给某人制造困难/找麻烦/出难题&#x…

2026/8/25 16:50:33 阅读更多 →
2026年8月影视仓tvbox最新接口配置地址【附链接】

2026年8月影视仓tvbox最新接口配置地址【附链接】

很多玩电视盒子的朋友都在用影视仓(TVBox 衍生版),软件本身只是播放器外壳,资源全靠外部配置接口。网上接口更新换代很快,大量旧地址已经失效,打开空白、加载失败,本篇给大家讲清楚获取思路、配…

2026/8/25 23:59:31 阅读更多 →

最新新闻

数学建模核心技能:插值与拟合的本质区别、算法实现与实战选型指南

数学建模核心技能:插值与拟合的本质区别、算法实现与实战选型指南

1. 项目概述:从“猜”数据到“造”模型在数学建模的世界里,我们常常面对一堆散乱的数据点,它们可能来自实验测量、社会调查或者系统采样。这些点就像夜空中的星星,孤立地看,每个点都只是一个精确的坐标。但我们的目标&…

2026/8/27 5:49:05 阅读更多 →
3步导出微信聊天记录:WeChatMsg生成HTML、Word、CSV与年度报告完整指南

3步导出微信聊天记录:WeChatMsg生成HTML、Word、CSV与年度报告完整指南

3步导出微信聊天记录:WeChatMsg生成HTML、Word、CSV与年度报告完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_T…

2026/8/27 5:49:05 阅读更多 →
音乐演化分析方法论:从WAV信号到年代突变点检测

音乐演化分析方法论:从WAV信号到年代突变点检测

1. 这不是一份“交作业式”的建模报告,而是一份可复用的音乐演化分析方法论如果你正在准备数学建模竞赛——尤其是亚太杯、国赛或认证杯这类强调“真实问题建模能力”而非纯算法炫技的赛事——那么你手头很可能正卡在这样一个典型困境里:题目给了一堆看似…

2026/8/27 5:49:05 阅读更多 →
如何识别AI项目中的水分?从规则引擎到工程诚实

如何识别AI项目中的水分?从规则引擎到工程诚实

AI 这个词,正在成为企业表达里最容易注水的词之一。我在一次内部评审会上见过一个典型场景:产品经理指着页面说,系统已经用 AI 完成自动分析;前端同学打开接口日志发现,后端只是把几个关键字段套进了一段写好的模板&am…

2026/8/27 5:49:05 阅读更多 →
8台DGX Spark组集群实战:从硬件组网到部署大模型推理

8台DGX Spark组集群实战:从硬件组网到部署大模型推理

最近 NVIDIA DGX Spark 的热度一直很高,很多人把它看作“桌面上跑大模型”的终极设备。不过单机归单机,真正让我觉得有意思的,是 Alex Ziskind 那个 8 台 DGX Spark 组集群的实验。8 台机器通过高速网络互联,变成一个可以承载超大…

2026/8/27 5:49:05 阅读更多 →
从冒泡排序到通用排序:C语言qsort模拟实现与回调机制详解

从冒泡排序到通用排序:C语言qsort模拟实现与回调机制详解

1. 从“排序”到“通用排序”:为什么我们需要qsort在C语言的世界里,排序是一个绕不开的话题。无论是处理学生成绩、整理商品价格,还是对任何结构化的数据进行组织,排序都是基础操作。很多初学者接触的第一个排序算法往往是冒泡排序…

2026/8/27 5:48:05 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →