LeetCode刷题笔录3Sum
来源:互联网 发布:清风纸巾怎么样知乎 编辑:程序博客网 时间:2024/06/05 20:18
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)
做过了2 Sum,这题自然不在话下。顺序遍历一遍数组,对于每个元素num[i],用-num[i]作为目标值对剩下的元素来做2 sum即可。注意数组排序以后,对于每一个i,只需要对i后面的数组元素进行2 sum即可。
另外这里比较trick的地方就是要注意去除重复元素。
public class Solution {public List<List<Integer>> threeSum(int[] num) {List<List<Integer>> res = new ArrayList<List<Integer>>();if (num.length <= 2)return res;Arrays.sort(num);int iValue = num[0];int jValue, kValue;List<Integer> sol = new ArrayList<Integer>(3);//initialize the arraylist with three meaningless values for(int i = 0; i < 3; i++){sol.add(Integer.MIN_VALUE);}for (int i = 0; i < num.length - 2; i++) {// avoid duplicationif (i != 0 && num[i] == iValue)continue;sol.set(0, num[i]);// do two sumint j = i + 1;int k = num.length - 1;while (j < k) {jValue = num[j];kValue = num[k];int twoSum = num[j] + num[k];// found a solutionif (twoSum + sol.get(0) == 0) {sol.set(1, num[j]);sol.set(2, num[k]);res.add(new ArrayList<Integer>(sol));// increment j until num[j] is different from the current j// value to avoid duplicateswhile (++j < k && num[j] == jValue);// the same for kwhile (--k > j && num[k] == kValue);} else {if (twoSum + sol.get(0) < 0) {while (++j < k && num[j] == jValue);} else {while (--k > j && num[k] == kValue);}}}iValue = num[i];}return res;}}
0 0
- LeetCode刷题笔录3Sum
- LeetCode刷题笔录 Two Sum
- LeetCode刷题笔录Minimum Path Sum
- LeetCode刷题笔录Path Sum
- LeetCode刷题笔录Path Sum II
- LeetCode刷题笔录Combination Sum
- LeetCode刷题笔录Sum Root to Leaf Numbers
- LeetCode刷题笔录Binary Tree Maximum Path Sum
- Leetcode刷题笔录 Anagrams
- LeetCode刷题笔录 Permutaions
- LeetCode刷题笔录Combinations
- LeetCode刷题笔录Subsets
- LeetCode刷题笔录Triangle
- LeetCode刷题笔录LRUCache
- LeetCode 刷题笔录 Add Two Numbers
- LeetCode刷题笔录 Reverse Integer
- LeetCode刷题笔录 Reorder List
- LeetCode刷题笔录 Jump Game II
- php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别
- Visitor 访问者模式
- 黑马程序员—TreeMap练习-字母出现的次数
- POJ 3356 AGTC.
- TextView功能总结(1)
- LeetCode刷题笔录3Sum
- Python 正则表达式查找字符串中特定字符
- AAA服务器的配置
- ubuntu 14.04 搭建LAMP环境
- HDU1262 素数筛
- ORA-12519: TNS:no appropriate service handler found 解决
- 户外露营常识
- tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:)
- Android控件之SeekBar