LeetCode 15. 3Sum
2017-05-09 02:41
381 查看
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.
Subscribe to see which companies asked this question.
LeetCode经典问题:*sum问题
暴力求解是n^*的复杂度,不可取。
整体思路是先排序(nlogn),然后使用三个指针,其中一个a从头部向尾部移动,另外两个b,c在a和尾部之间做搜索,可以通过比较值或者利用set的数据结构两种方式达到去重的目的。
import java.util.*;
public class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(nums.length<3){
return res;
}
Arrays.sort(nums);
int len = nums.length;
for(int i=0;i<len-2;i++){
if(nums[i]>0)break;
if(i>0&&nums[i]==nums[i-1])continue;
int j=i+1,k=len-1;
while(j<k){
if(nums[i]+nums[j]+nums[k]==0){
List<Integer>list = new ArrayList<Integer>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[k]);
res.add(list);
while(j<k&&nums[j]==nums[j+1])j++;
while(j<k&&nums[k]==nums[k-1])k--;
j++;
k--;
}
else if(nums[i]+nums[j]+nums[k]>0){
k--;
}
else j++;
}
}
return res;
}
}
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] ]
Subscribe to see which companies asked this question.
LeetCode经典问题:*sum问题
暴力求解是n^*的复杂度,不可取。
整体思路是先排序(nlogn),然后使用三个指针,其中一个a从头部向尾部移动,另外两个b,c在a和尾部之间做搜索,可以通过比较值或者利用set的数据结构两种方式达到去重的目的。
import java.util.*;
public class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(nums.length<3){
return res;
}
Arrays.sort(nums);
int len = nums.length;
for(int i=0;i<len-2;i++){
if(nums[i]>0)break;
if(i>0&&nums[i]==nums[i-1])continue;
int j=i+1,k=len-1;
while(j<k){
if(nums[i]+nums[j]+nums[k]==0){
List<Integer>list = new ArrayList<Integer>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[k]);
res.add(list);
while(j<k&&nums[j]==nums[j+1])j++;
while(j<k&&nums[k]==nums[k-1])k--;
j++;
k--;
}
else if(nums[i]+nums[j]+nums[k]>0){
k--;
}
else j++;
}
}
return res;
}
}
相关文章推荐
- Leetcode15. 3Sum
- Leetcode 1. Two Sum & 15. 3Sum & 16. 3Sum Closest & 18. 4Sum
- 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 18. 4Sum(四数之和)
- LeetCode:Minimum Path Sum
- leetcode — two-sum
- [LeetCode] Sum Root to Leaf Numbers
- Range Sum Query(leetcode)
- [leetcode] 303. Range Sum Query - Immutable 解题报告
- LeetCode:Minimum Path Sum
- LeetCode 4Sum
- [LeetCode]Partition Equal Subset Sum(Java)