LeetCode 15 — 3Sum(C++ Java Python)
来源:互联网 发布:野兽骑行 知乎 编辑:程序博客网 时间:2024/05/17 07:55
题目: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.
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感谢阅读,欢迎评论!
0 0
- LeetCode 15 3Sum (C,C++,Java,Python)
- LeetCode 15 — 3Sum(C++ Java Python)
- LeetCode 16 3Sum Closest(C,C++,Java,Python)
- [LeetCode] 015. 3Sum (Medium) (C++/Java/Python)
- [LeetCode] 016. 3Sum Closest (Medium) (C++/Java/Python)
- 3Sum Leetcode Python Java
- leetcode(一)—— Two Sum(Python/C++)
- 【leetcode】1. Two Sum(Python & C++)
- 【leetcode】112. Path Sum(Python & C++)
- LeetCode 18 4Sum (C,C++,Java,Python)
- LeetCode 1 — Two Sum(C++ Java Python)
- LeetCode 64 — Minimum Path Sum(C++ Java Python)
- LeetCode 112 — Path Sum(C++ Java Python)
- 3Sum Closest Leetcode Python Java
- [LeetCode] 001. Two Sum (Medium) (C++/Java/Python)
- [LeetCode] 018. 4Sum (Medium) (C++/Java/Python)
- [C++]LeetCode: 15 3Sum Closest (plus JAVA Code)
- LeetCode:1. Two Sum解法(C,C++,Jave,Python)
- java序列化工具类
- .NET在后置代码中输入JS提示语句(背景不会变白)
- 中石油拟在深圳东部填海39.7公顷 将开听证会
- 网站工作秘诀--从浏览器到服务器
- 利用STM32F103RB进行AD采样,并且利用了DMA控制器,并且进行了软件滤波
- LeetCode 15 — 3Sum(C++ Java Python)
- 旧制度与大革命
- lync2013 错误: 已为不同的传输层安全性(TLS)目标找到类型为“McxInternal”且完全限定的域名(FQDN)为
- 线性表顺序表插入操作题
- 十进制转化为二进制、二进制转化为十进制
- javascript
- Android debug.keystore 密码
- Android 字体加载
- 内核线程