15. 3Sum 题解
来源:互联网 发布:剑灵火影捏脸数据 编辑:程序博客网 时间:2024/06/05 02:29
15. 3Sum 题解
题目描述:
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]]
题目链接:15. 3Sum
算法描述:
由题意知,给定一个数组,找到数组中所有的唯一三元组,使它们的和为零。并且要求返回的数组满足递增。
首先,构造一个结果容器 ans。如果原数组为空,返回 ans。
我们对原数组进行从小到大排序,之后我们对其遍历,标定三元组的首元素 i(首元素一定不大于零并且位置小于数组长度减二),之后用 l 和 r 分别从首元素的后一位(i+1)和数组的最后一位( nums.size() - 1 )向中间逼近。当发现三者之和为零时,将它们放入结果容器 ans。
如果三者之和大于零,r--;如果三者之和小于零,l++。
注意在用标记i,l 和 r 遍历及查找时需要跳过重复元素。
算法复杂度为O(n²)
代码:
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ans; if(nums.size() == 0){ return ans; } sort(nums.begin(),nums.end()); for(int i=0; i < nums.size()-2 && nums[i] <= 0; i++){ if(i>0 && nums[i] == nums[i-1]){ continue; } int l = i+1; int r = nums.size()-1; while(l<r){ if(nums[i] + nums[l] + nums[r] == 0){ ans.push_back({nums[i], nums[l], nums[r]}); while(++ l < r && nums[l] == nums[l - 1]); while(l < -- r && nums[r] == nums[r + 1]); } else if (nums[i] + nums[l] + nums[r] > 0){ --r; } else{ ++l; } } } return ans; }};
0 0
- 15. 3Sum 题解
- 15. 3Sum题解
- LeetCodet题解--15. 3Sum
- Leetcode题解 15. 3Sum
- leetcode 15. 3Sum 题解
- Leetcode题解 - 15. 3Sum
- 15. 3Sum LeetCode题解
- leetcode题解-15. 3Sum
- leetcode题解-15. 3Sum && 16. 3Sum Closest
- LeetCode题解:3Sum
- LeetCode - 3Sum 题解
- LeetCode题解:3Sum
- 3Sum Closest题解
- 题解:3Sum Closest
- Leetcode题解-3Sum&3Sum Closest
- 关于2Sum,3Sum的题解
- LeetCode题解:3sum closest
- leetcode 题解 || 3Sum 问题
- 欢迎使用CSDN-markdown编辑器
- 1059.C语言竞赛(20分)
- 2017.4.13
- linux中find命令
- C++中针对int *p = new int(5) 与 int *p = new int[5]的区别
- 15. 3Sum 题解
- 前端实习面试总结(4.14大连腾讯)
- 【剑指offer之题目1510:替换空格 】九度OJ-1510-替换空格
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- 盒子模型
- Qt 实现 QQ 截图工具(开源OEasyScreenshot)
- Android WebView详解
- 二分查找和排序算法
- AutoItLibrary的安装