LeetCode15三数之和 容易理解版本
创始人
2024-05-29 21:01:43
0

题目: 给你一个整数数组 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] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

思路:

逐个遍历数组,确定第一个元素后,剩下的两个数字就是和为 target - nums[i] 的两个数字了,因此将确定元素的下一个索引和target-nums[i]传给两个数相加和为某个数的函数,由该函数返回所有满足和为target-nums[i]的二维vector,将返回的结果遍历,如果结果不为空,每次循环将刚在确定的第一个数加进这个一维vector中组成一个和为0的三元组,再将这个三元组加入到vector中,在最后需要跳过第一个数组重复的情况,否则可能会出现重复的结果。

vector> twoSumtarget(vector& nums,int start,int target) {int left = start;int right = nums.size() - 1;vector> res;while (leftint leftnum = nums[left];int rightnum = nums[right];int sum = nums[left] + nums[right];if (sum while (left < right&&nums[left] == leftnum) {left++;}}else if (sum > target) {while (left < right && nums[right] == rightnum) {right--;}}else if(sum == target){res.push_back({ nums[left],nums[right] });while (left < right && nums[left] == leftnum) {left++;}while (left < right && nums[right] == rightnum) {right--;}}}return res;
}vector> threeSumtarget(vector& nums, int target) {sort(nums.begin(),nums.end());int numsize = nums.size();vector> res;for (int i = 0; i < numsize;i++) {vector> tuples = twoSumtarget(nums,i+1,target-nums[i]);//如果存在满足条件的二元组,再加上nums[i]结果就是三元组for (vector& tuple:tuples) {tuple.push_back(nums[i]);res.push_back(tuple);}//跳过第一个数字重复的情况,否则可能会出现重复结果while (i < numsize - 1 && nums[i] == nums[i + 1]) i++;}return res;
}int main() {vector c{ -1,0,1,2,-1,4 };int target = 0;vector> result= threeSumtarget(c,target);for (vector>::iterator it = result.begin(); it != result.end();it++) {for (vector::iterator pit = (*it).begin(); pit != (*it).end();pit++) {cout<<*pit<<" ";}cout << endl;}return 0;
}

相关内容

热门资讯

安卓系统未接来电,揭秘你的通话... 手机响了又没接,是不是错过了什么重要信息?别急,今天就来聊聊安卓系统中的那个让人头疼的“未接来电”问...
安卓系统没显示界面,安卓系统无... 手机屏幕上突然一片漆黑,安卓系统竟然没显示界面了!这可怎么办呢?别急,让我来给你支支招,帮你解决这个...
各安卓双系统对比,性能、兼容性... 你有没有想过,为什么你的手机里会有两个系统?是不是好奇它们之间有什么不同?今天,就让我带你来一场各安...
安卓系统的类似ipad,媲美i... 你有没有想过,在安卓的世界里,竟然也能找到类似iPad的体验呢?没错,就是那种触控流畅、界面美观,还...
安卓系统授权收费吗,揭秘授权机... 你有没有想过,你的安卓手机里那些可爱的应用,它们是怎么来到你的手机里的呢?没错,就是通过安卓系统的授...
把安卓改为ios系统,系统转换... 你有没有想过,为什么有些人把安卓手机换成iOS系统呢?是不是觉得这只是一个简单的操作,其实不然哦!今...
安卓系统的灵动岛,创新交互体验... 你知道吗?最近安卓系统里有个新玩意儿,叫“灵动岛”,听起来是不是有点像科幻电影里的高科技?没错,它就...
安卓系统可以清理吗,提升运行速... 亲爱的安卓用户们,你是不是也和我一样,看着手机里那些堆积如山的文件和应用程序,心里直发慌?别急,今天...
安卓系统修改GPU频率,安卓系... 你有没有想过,你的安卓手机在默默无闻地工作,而它的GPU(图形处理器)其实有着巨大的潜力等待被挖掘呢...
安卓4.4系统什么手机,那些引... 你有没有想过,安卓4.4系统那会儿,手机市场可是热闹非凡呢!那时候,各大品牌纷纷推出搭载这个系统的手...
安卓平板改系统教程,安卓平板系... 你有没有想过给你的安卓平板换换口味,让它焕发新生呢?没错,今天就要来手把手教你如何给安卓平板改系统,...
车载怎么升级安卓系统,轻松实现... 你有没有发现,车载系统升级安卓系统后,整个驾驶体验都变得不一样了呢?想象当你坐在车里,手握方向盘,眼...
动态应用推荐安卓系统,动态应用... 你有没有发现,每次打开手机,那些应用推荐总是那么精准地戳中你的心?是不是有时候在想,这安卓系统是怎么...
vmware 安卓系统安装教程... 亲爱的电脑玩家们,你是否曾梦想在虚拟机中安装安卓系统,体验一把真正的移动办公或游戏乐趣?今天,就让我...
安卓9添加系统应用,系统级应用... 你知道吗?安卓系统又更新啦!这次可是升级到了安卓9哦!是不是很激动?别急,让我带你一起探索一下安卓9...
ios系统和安卓系统如何互换,... 你有没有想过,你的iPhone手机里的照片,能不能直接传到你的安卓平板上呢?或者,你的安卓手机上的游...
安卓系统终端进入后台,安卓终端... 你有没有发现,手机里的安卓系统终端有时候会偷偷进入后台,这可真是让人又爱又恨的小秘密呢!今天,就让我...
创维 非安卓系统下载,探索独特... 你家的创维电视是不是最近有点儿不给力啊?别急,别急,让我来给你支个招儿!今天咱们就来聊聊创维电视非安...
win10系统模拟安卓系统,打... 你有没有想过,在Windows 10的系统里,竟然能模拟出一个安卓的世界?没错,就是那种手指滑动的快...
安卓系统的定位软件,智慧生活 你有没有发现,现在手机里装了那么多应用,但最离不开的还得是那个能帮你找到家的定位软件。今天,就让我带...