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

3Sum问题

3Sum

## [更多技术博客 http://vilins.top/](http://vilins.top/)

1.题目

Given an arraynumsofnintegers, are there elementsa,b,cinnumssuch thata+b+c= 0? Find all unique triplets in the array which gives the sum of zero.

Note:

The solution set must not contain duplicate triplets.

Example:

Given array nums = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]

2. 分析

与这题类似的题目如下LeetCode--3Sum Closest-CSDN博客

这里需要找三个数相加的和等于0,那么我们将问题进行一下转化,先将三个数的相加转化为两个数的相加,也就是说,我们先确定一个数,它是作为遍历的标记,然后这个数的下一个数作为begin,数组最后一个数作为end,从两边进行逼近,也就是说,但这两个数的和比target小的时候,begin++;当这两个数的和比target大的时候,end--;不过这种操作的前提是数组是有序的。为了避免相同元组,我们先用set存,最后转化为vector;为避免nums元素相同而浪费时间,我们用flag做标记。

3. 源码

class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { set<vector<int> > result; int flag = 0; if(nums.size() == 0) { return vector<vector<int> >(); } for(int i = 0; i < nums.size() - 1; i++) { for(int j = 0; j < nums.size() - i - 1; j++) { if(nums[j] > nums[j+1]) { int temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } } if(nums[0] == nums[nums.size() - 1]) { flag = 1; } int begin = 0, end = nums.size() - 1; for(int i = 0; i < nums.size(); i++) { //cout << "ll" << endl; begin = i + 1; end = nums.size() - 1; int target = 0 - nums[i]; while(begin < end) { if(nums[begin] + nums[end] < target) { begin++; } else if(nums[begin] + nums[end] > target) { end--; } else { vector<int> r; r.push_back(nums[i]); r.push_back(nums[begin]); r.push_back(nums[end]); result.insert(r); begin++; if(flag == 1) { break; } } } } vector<vector<int> > v_result(result.begin(), result.end()); return v_result; } };

## [更多技术博客 http://vilins.top/](http://vilins.top/)

http://www.cnnetsun.cn/news/2710977.html

相关文章:

  • 终极神界原罪2模组管理指南:告别游戏闪退的完整教程
  • 基于Arduino与MQTT的远程办公时间交互系统:硬件仪表盘设计
  • FastSpeech语音合成:非自回归架构如何实现实时高质TTS
  • Loop:macOS窗口管理终极解决方案,免费开源提升桌面效率300%
  • 从D435深度相机到2304电机:一份给软件工程师的无人机硬件入门指南
  • Ti AWR2944雷达开发板新玩法:用BPM模式实现毫米波微弱形变监测(保姆级教程)
  • 晶体管无稳态多谐振荡器:零编程实现LED流水灯效果
  • DIY人体工学键盘支架:低成本PVC管材改造方案详解
  • Arduino与WS2812B打造动态心脏线弦艺光效装置
  • 终极指南:如何用Fan Control免费软件精准掌控Windows风扇控制
  • 手机变开发机:用Termux在安卓上编译APK的完整踩坑实录(附ARM版SDK工具)
  • 跳出论文写作固有误区,Okbiye 依托模块化配置实现毕业论文全流程精细化辅助
  • 山东英语背单词服务商:高效学习法与成功案例分享
  • 第七史诗自动化革命:E7Helper智能脚本助你解放双手
  • 树莓派5变身家庭服务器:用1Panel面板一键搞定Docker、MySQL和代码仓库
  • 3个步骤轻松管理《神界:原罪2》模组,告别加载混乱和冲突
  • Windows 10 PL2303驱动终极解决方案:5分钟解决USB转串口兼容性问题
  • 7-Zip-zstd技术深度解析:现代压缩算法集成与性能优化实践
  • 告别数学恐惧:用Python和NumPy手把手实现Gibbs采样(附完整代码)
  • 从‘拍脑袋’到‘按图索骥’:我是如何用知识图谱结构引导LLM进行可解释推理的
  • 关于windows系统的科普
  • CleanMyWechat实战:3倍性能提升的微信缓存多线程清理技术解析
  • ES8311单声道音频Codec配套资料:ESP32-S3驱动代码+I2C/I2S硬件配置手册+芯片数据手册
  • DALL-E 3提示词工程实战:绕过内容限制,解锁AI图像创作潜力
  • 学术写作效率飞跃!2026智能AI论文软件推荐指南
  • 【零信任AI质量网关】:从数据接入、算法审计到结果追溯,构建通过FDA 21 CFR Part 11认证的闭环链路
  • LabVIEW多版本兼容Modbus通信工具集(RTU/ASCII/TCP全协议支持)
  • 电力经济调度Python工具包:GA/PSO/MILP四算法实现,含IEEE30节点完整案例与中文注释
  • 如何在PS4上轻松管理全世代游戏存档:Apollo Save Tool终极指南
  • 老电视信号接口改造:从300欧姆平衡端子到75欧姆同轴接口的工程实践