题目为给定一个整型数组,输出该数组中3个数之和为0的集合
1.解法为
先对该数组进行排序,然后固定第一个数不变,找出该数后和为(0-第一个数)的两个数,找出两数之和的方法与找出最大容量的那一题类似,从首尾开始迭代。
主要的思想为将找出三个数的和转化为找出两个数的和,简化了一下。
时间复杂度为O(n^2);
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> all=new ArrayList<List<Integer>>();
for(int i=0;i<nums.length-1;i++){
if(nums[i]>0) {
break;
}
int start=i+1;
int end=nums.length-1;
int num=0-nums[i];
while(start<end) {
if(nums[start]+nums[end]==num) {
if(!all.contains(Arrays.asList(nums[i], nums[start], nums[end]))) {
all.add(Arrays.asList(nums[i], nums[start], nums[end]));
}
while(start<end&&nums[start]==nums[start+1]) {
start++;
}
while(start<end&&nums[end]==nums[end-1]) {
end--;
}
start++; end--;
}else if(nums[start]+nums[end]<num) {
start++;
}else {
end--;
}
}
}
return all;
}
}