【Leetcode】15. 3Sum
来源:互联网 发布:json转java实体对象 编辑:程序博客网 时间:2024/05/20 08:02
【Leetcode】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]]
解题思路
双指针问题。
当固定住其中一个值时候,题目就和Leetcode1 2sum差不多了。
第二个数字从第一个数字的后一个开始找,而第三个数字则从最后一个数字开始找,通过移动控制这两个indexer的移动获取到正确的组合。
然后向后移动,更新第一个数字,再次查找其对应的所有剩下两个数字的组合。
为了防止重复,当每个数字被使用过之后,跳过与之相同的数字。
AC代码
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ans; sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size(); ++i) { // fix the first number and find the other two from left and right int target = -nums[i]; int front = i + 1; int back = nums.size() - 1; while (front < back) { int twoSum = nums[front] + nums[back]; if (twoSum > target) back--; else if (twoSum < target) front++; else { vector<int> triplets; triplets.push_back(nums[i]); triplets.push_back(nums[front]); triplets.push_back(nums[back]); ans.push_back(triplets); //get rid of duplicated number two and three while(front < back && nums[front] == triplets[1]) front++; while(front < back && nums[back] == triplets[2]) back--; } } while(i + 1 < nums.size() && nums[i + 1] == nums[i]) i++; } return ans; }};
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
- 简述冯诺依曼计算机体系结构
- JavaScript 关于作用域链
- 动态内存分配,创建一个对每一行列数不同(元素个数不同)的二维数组!
- zhedapat1001
- int *p=(int *)(&a + 1)的理解
- 【Leetcode】15. 3Sum
- 27. Remove Element
- rails路由(1)
- Html,css学习总结(一)
- Multipath TCP Test
- sdutacm-区间覆盖问题
- JavaScript中对象的一些基本用法
- PHP操作Postgresql类
- 有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,