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

leetcode(top 100) 三数之和 相向双指针

题目:

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

题解:

第一步先对数组排序,然后依次枚举每一个数然后用查找两数之和的办法查找是否有两个数与当前枚举的数相加等于0。我认为本题的难点在于,在实现上述目标的基础上加上不可包含重复的三元组,这里相当于是一个小的数学知识,a,b,c三个数和是定值,如果这三个数中有两个数不变,那第三个值怎么变都是一样的,所以要想是非重复的三元组,在找到一组答案后再找下一组时至少要有两个数是与上次是不一样的。

vector<vector<int>>ans;void f(int l,int r,vector<int>&arr,int k){ while(l<r){if(arr[l]+arr[r]+arr[k]>0)r-=1;else if(arr[l]+arr[r]+arr[k]<0)l+=1;else {ans.push_back({arr[k],arr[l],arr[r]});//找下一组不重复的三元组l++;r--;while(l<r&&arr[l]==arr[l-1]){l++;}while(l<r&&arr[r]==arr[r+1]){r--;}}}}vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());for(int i=0;i<nums.size()-2;i++){//相同的数只用枚举查找一次即可if(i&&nums[i]==nums[i-1])continue;f(i+1,nums.size()-1,nums,i);}return ans;}

时间复杂度:O(n)

相关文章:

  • C# Task 包含 await ConfigureAwait CancellationTokenSource
  • RabbitMQ快速入门
  • python包管理器--- pip、conda、mamba的比较
  • npm install 安装不成功,node-sass缺失,提示python环境缺失的解决办法
  • Kafka内外网分流配置listeners和advertised.listeners
  • Spring Cache
  • idea开发工具清除Git凭证(含Git凭证管理策略)
  • [Bug]使用gradio创建应用提示AttributeError: module ‘gradio‘ has no attribute ‘inputs‘
  • Unity2D计算两个物体的距离
  • javaswing图书管理系统
  • 从零开始! Jupyter Notebook的安装教程
  • 6.19作业
  • Redis 键(key)
  • QTday5 2024-06-19
  • 视频监控管理平台智能边缘分析一体机安防监控平台离岗检测算法
  • [deviceone开发]-do_Webview的基本示例
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • angular学习第一篇-----环境搭建
  • es6--symbol
  • JS基础之数据类型、对象、原型、原型链、继承
  • Magento 1.x 中文订单打印乱码
  • Phpstorm怎样批量删除空行?
  • php中curl和soap方式请求服务超时问题
  • React-flux杂记
  • Vue--数据传输
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 关于Flux,Vuex,Redux的思考
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 设计模式(12)迭代器模式(讲解+应用)
  • 我的面试准备过程--容器(更新中)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 06-01 点餐小程序前台界面搭建
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​​​【收录 Hello 算法】9.4 小结
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #### go map 底层结构 ####
  • $().each和$.each的区别
  • $.ajax中的eval及dataType
  • $refs 、$nextTic、动态组件、name的使用
  • %@ page import=%的用法
  • (7)svelte 教程: Props(属性)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)Linux——Linux常用指令
  • (二)Optional
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二开)Flink 修改源码拓展 SQL 语法
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (七)c52学习之旅-中断
  • (转)ABI是什么