双指针--双数之和
题目解析给定一个整数数组nums要求找出所有不重复的三元组[nums[i], nums[j], nums[k]]满足索引互不相同i ! j、i ! k、j ! k三数之和为 0nums[i] nums[j] nums[k] 0结果中不能包含重复的三元组核心思路这道题的难点在于去重和时间复杂度优化直接暴力枚举的时间复杂度是 \(O(n^3)\)会超时。我们可以用排序 双指针的方法将时间复杂度优化到 \(O(n^2)\)。算法步骤排序预处理先对数组进行排序这样可以利用有序性进行双指针的移动和去重操作。固定第一个数遍历数组将当前元素作为三元组的第一个数nums[i]。如果当前数和前一个数相同直接跳过去重。如果当前数大于 0因为数组是有序的后面的数也都是正数三数之和不可能为 0直接终止循环。双指针寻找另外两个数用左指针left i 1和右指针right nums.size() - 1来寻找另外两个数计算三数之和sum nums[i] nums[left] nums[right]如果sum 0说明需要更大的数左指针右移如果sum 0说明需要更小的数右指针左移如果sum 0记录该三元组并移动左右指针跳过重复值完整代码cppclass Solution { public: vectorvectorint threeSum(vectorint nums) { vectorvectorint res; int n nums.size(); if (n 3) return res; // 数组长度不足3直接返回空 sort(nums.begin(), nums.end()); for (int i 0; i n - 2; i) { // 去重跳过与前一个元素相同的情况 if (i 0 nums[i] nums[i-1]) continue; // 剪枝如果当前数已经大于0后面不可能组成和为0的三元组 if (nums[i] 0) break; int left i 1; int right n - 1; while (left right) { int sum nums[i] nums[left] nums[right]; if (sum 0) { left; } else if (sum 0) { right--; } else { // 找到一个符合条件的三元组 res.push_back({nums[i], nums[left], nums[right]}); // 跳过左指针重复值 while (left right nums[left] nums[left1]) left; // 跳过右指针重复值 while (left right nums[right] nums[right-1]) right--; // 移动指针继续寻找 left; right--; } } } return res; } };关键优化点排序去重排序后相同的元素会相邻我们可以很方便地跳过重复值。剪枝操作当固定的第一个数大于 0 时直接终止循环因为后面的数都是正数不可能组成和为 0 的三元组。双指针移动找到符合条件的三元组后需要同时移动左右指针并跳过重复值避免生成重复的三元组。复杂度分析时间复杂度\(O(n^2)\)其中排序的时间复杂度是 \(O(n \log n)\)双指针遍历的时间复杂度是 \(O(n^2)\)。空间复杂度\(O(\log n)\)排序的栈空间或 \(O(n)\)如果使用了额外的数组存储结果。

相关新闻

无人机视角城市居民区房子塔楼树木检测数据集VOC+YOLO格式2476张3类别

无人机视角城市居民区房子塔楼树木检测数据集VOC+YOLO格式2476张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2476 标注数量(xml文件个数):2476 标注数量(txt文件个数):2476 …

2026/7/12 8:18:02 阅读更多 →
椰子树病害检测数据集VOC+YOLO格式2601张4类别

椰子树病害检测数据集VOC+YOLO格式2601张4类别

注意数据集中存在大量增强图片主要是旋转增强,请认真看图片数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):2601标注数量(xml文件…

2026/7/10 2:28:22 阅读更多 →
Oracle 19c入门学习教程,从入门到精通,Oracle系统调优 —— 内存结构与参数优化详解(15)

Oracle 19c入门学习教程,从入门到精通,Oracle系统调优 —— 内存结构与参数优化详解(15)

Oracle系统调优 —— 内存结构与参数优化详解 一、环境准备:Oracle 安装与调优前提 注意:系统调优需具备 DBA 权限,建议在测试环境(如 Oracle 21c XE)中操作。 1. 安装 Oracle Database 21c XE(简要回顾&am…

2026/7/12 13:01:36 阅读更多 →

最新新闻

Proteus社区与支持:如何参与开源贡献和获取技术帮助

Proteus社区与支持:如何参与开源贡献和获取技术帮助

Proteus社区与支持:如何参与开源贡献和获取技术帮助 【免费下载链接】proteus Generate .proto files from Go source code. 项目地址: https://gitcode.com/gh_mirrors/pro/proteus Proteus是一个强大的Go语言工具,能够从Go源代码自动生成Protoc…

2026/7/12 21:08:25 阅读更多 →
如何用kohya_ss图形界面轻松训练AI绘画模型:从入门到精通完整指南

如何用kohya_ss图形界面轻松训练AI绘画模型:从入门到精通完整指南

如何用kohya_ss图形界面轻松训练AI绘画模型:从入门到精通完整指南 【免费下载链接】kohya_ss 项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss 还在为复杂的AI模型训练命令而头疼吗?想要在AMD显卡上也能轻松训练属于自己的AI绘画模型…

2026/7/12 21:06:24 阅读更多 →
SandboxFusion API使用教程:快速集成到AI代码生成系统

SandboxFusion API使用教程:快速集成到AI代码生成系统

SandboxFusion API使用教程:快速集成到AI代码生成系统 【免费下载链接】SandboxFusion 项目地址: https://gitcode.com/gh_mirrors/sa/SandboxFusion SandboxFusion是一个强大的代码沙盒系统,专门为AI代码生成和评估而设计。这个开源工具可以帮助…

2026/7/12 21:04:24 阅读更多 →
论坛(五)帖子编辑与话题

论坛(五)帖子编辑与话题

论坛(五)帖子编辑与话题 本文是「AtomCode 驱动全栈开发」系列的第 16 篇。我们将深入分析论坛项目的帖子编辑页面、话题选择联动、Markdown 编辑器集成,完整展示 PostEdit 视图、路由配置、Topic 模型及前后端联调的全过程。 目录 1. 引言2…

2026/7/12 21:04:24 阅读更多 →
如何快速开始使用OpenTelemetry-proto:从安装到第一个数据导出

如何快速开始使用OpenTelemetry-proto:从安装到第一个数据导出

如何快速开始使用OpenTelemetry-proto:从安装到第一个数据导出 【免费下载链接】opentelemetry-proto OpenTelemetry protocol (OTLP) specification and Protobuf definitions 项目地址: https://gitcode.com/gh_mirrors/op/opentelemetry-proto OpenTeleme…

2026/7/12 21:02:23 阅读更多 →
UE5蓝图5分钟实现3DTiles动态加载:数字孪生大场景轻量化方案

UE5蓝图5分钟实现3DTiles动态加载:数字孪生大场景轻量化方案

1. 项目概述:为什么要在UE5里动态加载3DTiles?如果你正在用UE5做数字孪生、智慧城市或者大场景仿真,手头有一大堆倾斜摄影、BIM或者点云数据,格式是OSGB或者别的什么,最后大概率都得转成3DTiles。数据量一大&#xff0…

2026/7/12 21:02:23 阅读更多 →

日新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻