LeetCode 15. 3Sum
来源:互联网 发布:win10重装linux子系统 编辑:程序博客网 时间:2024/06/15 23:57
- 题目
- 题意
- 分析
- 代码
题目
Given an array S of n integers, are there elements a, b, c in S such that a + 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.
For example, given array S = [-1, 0, 1, 2, -1, -4],
A solution set is:[ [-1, 0, 1], [-1, -1, 2]]
题意
给出一个数组,找出数组中任意三个和为0的数,得到的集合里面不能包括重复的三元组。比如,给出数组S = [-1, 0, 1, 2, -1, -4],
解法是:[ [-1, 0, 1], [-1, -1, 2]]
分析
这道题可以用深度搜索,考虑到深度只为3,我做了简化,首先选定第一个数one,那么剩下的两个数two、three符合条件,-one = two+three。考虑到two和three是数组中不同下标的值,可以分别从给出数组头和尾部往中间找。
时间复杂度为O(n*n)
注意:解集不能存在重复的三元组。
代码
void findSum(vector<int>& nums,vector<vector<int>> &result,int target, int index){ int two=index+1, three =nums.size()-1; while(two<three){ if(nums[index]+nums[two]+nums[three]==target){ vector<int> temp = {nums[index],nums[two],nums[three]}; result.push_back(temp); while (two < three && nums[two] == temp[1]) two++; while (two < three && nums[three] == temp[2]) three--; } else if(nums[index]+nums[two]+nums[three]>target) three--; else if(nums[index]+nums[two]+nums[three]<target) two++; } while (index + 1 < nums.size() && nums[index + 1] == nums[index]) index++; if(index<nums.size()-2) findSum(nums, result, target,index+1);}vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; if(nums.size()<3) return result; std::sort(nums.begin(), nums.end()); findSum(nums,result,0,0); return result;}
313 / 313 test cases passed.
Status: Accepted
0 0
- LeetCode 15. 3Sum
- LeetCode --- 15. 3Sum
- [Leetcode] 15. 3Sum
- 【LeetCode】15. 3Sum
- 【leetcode】15. 3sum
- 【leetcode】15. 3Sum
- [leetcode] 15. 3Sum
- leetcode 15. 3Sum
- leetcode 15. 3Sum
- leetcode 15. 3Sum
- Leetcode 15. 3Sum
- LeetCode - 15. 3Sum
- [LeetCode]15. 3Sum
- Leetcode 15. 3Sum
- leetcode 15. 3Sum
- leetcode 15. 3Sum
- 【leetcode】15. 3Sum
- Leetcode - 15. 3Sum
- 计算机网络自顶向下第二章读书笔记(未完)
- mysql 聚集函数以及是否忽略null值
- redis接口的java封装
- JSON数据格式化展示
- 【ASP.NET】管道模型
- LeetCode 15. 3Sum
- pat 1065. A+B and C (64bit)
- 学习小结
- 关于三角函数、反三角函数在VC和linux gcc下的编译
- java中迭代器的用法
- 静态变量的加载
- Python学习4-dict和set
- first-of-type,nth-of-type,last-of-type分类问题
- Max Sum of Max-K-sub-sequence