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

leetcode面试经典150题——29 三数之和

题目:盛最多水的容器

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

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

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

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。
leetcode链接

方法一:
在原数组无序的两数之和中,由于输出的是元素的下标,所以我们不能够用排序+双指针的方法,因为会打破元素本来的位置,而此题只需要输出元素即可,无需输出元素的下标,因此我们可以先进行排序,再利用双指针的方法,但此题为三数之和,我们考虑,我们先确定第一个数,那么找其它两个数就相当于找target和为0-num[i](第一个数)的两个数,这样就转变成了两数之和,对于第一个数,我们枚举出数组前n-2个数作为第一个数的情况,然后在第一个数的后面用双指针的方法找出两数之和为target的其它两个数。
但是这样做出来的答案会有重复的三元组,那我们如何避免重复的问题呢,事实上,我们对于第一个数,如果此时确定的第一个数和上一次确定的第一个数相同,那么我们后面找出来的答案肯定也会重复,所以我们跳过相同的第一个数,同样的对于第二个数,我们在第一个数确定的情况下,也要跳过和上一次确定相同的第二个数,这样就能够保证答案三个数不会是之前出现过的三个数字。
时间复杂度:o(n²) 第一个数字枚举的时间为o(n),后面双指针的时间为o(n),总共的时间复杂度为o(n²)
空间复杂度:o(logn),快速排序的空间复杂度为o(logn)

vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int> > ans;int n = nums.size();sort(nums.begin(),nums.end());for(int i=0;i<n-2;i++){int left = i+1,right = n-1;int target = 0-nums[i];if(i>0&&nums[i]==nums[i-1]){continue;}while(left<right){if(left>i+1&&nums[left]==nums[left-1]){left++;continue;}if(nums[left]+nums[right]==target){ans.push_back({nums[i],nums[left],nums[right]});}nums[left]+nums[right]>target?right--:left++;}}return ans;
}
http://www.lryc.cn/news/238919.html

相关文章:

  • 数据分析基础之《jupyter notebook工具》
  • Android Studio Error “Unsupported class file major version 61“---异常信息记录
  • javaScript 内存管理
  • Idea2023 Springboot web项目正常启动,页面展示404解决办法
  • Android手机如何用Charles抓包HTTPS接口
  • Oracle for Windows安装和配置——Oracle for Windows net配置
  • C#中.NET 7.0 Windows窗体应用通过EF访问已有数据库并实现追加、删除、修改、插入记录
  • 【文末送书】计算机网络 | IO多路转接技术 | poll/epoll详解
  • 【Linux】 uptime命令使用
  • 数学建模-图与网络模型解题方法和代码实现
  • 宏集新闻 | 虹科传感器事业部正式更名为宏集科技
  • DataFunSummit:2023年数据基础架构峰会-核心PPT资料下载
  • 解析大型语言模型的训练、微调和推理的运行时性能
  • MAX/MSP SDK学习06:内存管理
  • python网络通信之基础知识填坑
  • 【腾讯云云上实验室-向量数据库】腾讯云开创新时代,发布全新向量数据库Tencent Cloud VectorDB
  • 【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV4)模型算法详解
  • opencv dots_image_kernel
  • 使用pytorch利用神经网络原理进行图片的训练(持续学习中....)
  • 2023年中国合成云母行业现状及市场格局分析[图]
  • Vue3+Vite实现工程化,插值表达式和v-text以及v-html
  • 艾泊宇产品战略:灵感于鬼屋,掌握打造卓越用户体验的关键要素
  • 深度学习环境配置(Anaconda+pytorch+pycharm+cuda)
  • 不是说人工智能是风口吗,那为什么工作还那么难找?
  • new Vue() 发生了什么
  • 【算法】二叉树的存储与遍历模板
  • 【Go学习之 go mod】gomod小白入门,在github上发布自己的项目(项目初始化、项目发布、项目版本升级等)
  • 79基于matlab的大米粒中杂质识别
  • Vue 项目实战——如何在页面中展示 PDF 文件以及 PDFObject 插件实战
  • 系列六、ThreadLocal内存泄露案例