LeetCode 15 — 3Sum(C++ Java Python)
2014-03-20 21:22
573 查看
题目:http://oj.leetcode.com/problems/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:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.
题目翻译:
给定具有n个整数的数组S,其中是否存在元素a,b,c,使得a + b + c = 0?找出总和为0的所有不同三元组。
注意:
三元组( A,B, C)的元素必须非递减排序。(即a ≤ b ≤ c)
解集不能包含重复的三元组。
例如给定数组S = {-1 0 1 2 -1 -4},
解集为
(-1, 0, 1)
(-1, -1, 2)
分析:
类似于Two Sum,但要用外循环遍历S作为a,对于b、c的求解类似Two
Sum。
C++实现:
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:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
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)
题目翻译:
给定具有n个整数的数组S,其中是否存在元素a,b,c,使得a + b + c = 0?找出总和为0的所有不同三元组。
注意:
三元组( A,B, C)的元素必须非递减排序。(即a ≤ b ≤ c)
解集不能包含重复的三元组。
例如给定数组S = {-1 0 1 2 -1 -4},
解集为
(-1, 0, 1)
(-1, -1, 2)
分析:
类似于Two Sum,但要用外循环遍历S作为a,对于b、c的求解类似Two
Sum。
C++实现:
class Solution { public: vector<vector<int> > threeSum(vector<int> &num) { vector<vector<int> > result; if(num.size() < 3) { return result; } vector<int> tmp; std::sort(num.begin(), num.end()); for(int i = 0; i < num.size() - 2; ++i) { if(i > 0 && num[i] == num[i - 1]) { continue; } int j = i + 1; int k = num.size() - 1; while(j < k) { if(num[i] + num[j] + num[k] > 0) { --k; } else if(num[i] + num[j] + num[k] < 0) { ++j; } else { tmp.clear(); tmp.push_back(num[i]); tmp.push_back(num[j]); tmp.push_back(num[k]); result.push_back(tmp); ++j; --k; while(j < k && num[j] == num[j - 1]) { ++j; } while(j < k && num[k] == num[k + 1]) { --k; } } } } return result; } };Java实现:(注意tmp不能在for循环外创建,否则是同一个对象,之后的赋值会改变原先的值)
public class Solution { public ArrayList<ArrayList<Integer>> threeSum(int[] num) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); Arrays.sort(num); for (int i = 0; i < num.length - 2; ++i) { if (i > 0 && num[i] == num[i - 1]) { continue; } int j = i + 1; int k = num.length - 1; while (j < k) { if (num[i] + num[j] + num[k] > 0) { --k; } else if (num[i] + num[j] + num[k] < 0) { ++j; } else { ArrayList<Integer> tmp = new ArrayList<Integer>(); tmp.add(num[i]); tmp.add(num[j]); tmp.add(num[k]); result.add(tmp); --k; ++j; while (j < k && num[j] == num[j - 1]) { ++j; } while (j < k && num[k] == num[k + 1]) { --k; } } } } return result; } }Python实现:
class Solution: # @return a list of lists of length 3, [[val1,val2,val3]] def threeSum(self, num): num.sort() result = [] i = 0 while i < len(num) - 2: if i > 0 and num[i] == num[i - 1]: i += 1 continue j = i + 1 k = len(num) - 1 while j < k: if num[i] + num[j] + num[k] > 0: k -= 1 elif num[i] + num[j] + num[k] < 0: j += 1 else: tmp = [num[i], num[j], num[k]] result.append(tmp) j += 1 k -= 1 while j < k and num[j] == num[j - 1]: j += 1 while j < k and num[k] == num[k + 1]: k -= 1 i += 1 return result感谢阅读,欢迎评论!
相关文章推荐
- LeetCode 15 3Sum (C,C++,Java,Python)
- [LeetCode] 015. 3Sum (Medium) (C++/Java/Python)
- [LeetCode] 001. Two Sum (Medium) (C++/Java/Python)
- LeetCode 35 — Search Insert Position(C++ Java Python)
- LEETCODE 15 3Sum (JAVA题解)
- [C++]LeetCode: 15 3Sum Closest (plus JAVA Code)
- [LeetCode] 005. Longest Palindromic Substring (Medium) (C++/Java/Python)
- LeetCode 33 — Search in Rotated Sorted Array(C++ Java Python)
- LeetCode 20 — Valid Parentheses(C++ Java Python)
- [LeetCode] 006. ZigZag Conversion (Easy) (C++/Java/Python)
- LeetCode 96 — Unique Binary Search Trees(C++ Java Python)
- leetcode解题之 15. 3Sum Java版(结果为目标值的三个数字)
- LeetCode 27 — Remove Element(C++ Java Python)
- LeetCode 58 — Length of Last Word(C++ Java Python)
- [LeetCode] 011. Container With Most Water (Medium) (C++/Java/Python)
- LeetCode 112 — Path Sum(C++ Java Python)
- Java [leetcode 15] 3Sum
- LeetCode 67 — Add Binary(C++ Java Python)
- [LeetCode] 022. Generate Parentheses (Medium) (C++/Java/Python)
- LeetCode 141 — Linked List Cycle(C++ Java Python)