这道题应该可以用暴力破解,我先尝试过一次,但是刚开始没想到怎么去重,就用了双指针,写完后突然想起那里面怎么去重了,但是这里就用这种方法吧.
首先为了之后方便去重,要对数组进行排序,之后便是常规的双指针。
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
//对数组排序
Arrays.parallelSort(nums);
for (int i = 0;i < nums.length-2;i++) {
if(nums[i]>0) {
continue;
}
if(i>0 && nums[i]==nums[i-1]) {
continue;
}
int left=i+1;
int right=nums.length-1;
while(left<right) {
if(nums[i]+nums[left]+nums[right]>0) {
right--;
}else if(nums[i]+nums[left]+nums[right]<0) {
left++;
}else {
List <Integer> list = new ArrayList<> ();
list.add(nums[i]);
list.add(nums[left]);
list.add(nums[right]);
res.add(list);
left++;
right--;
while(right>0&&nums[right]==nums[right+1]) {
right--;
}
while(left<nums.length-1&&nums[left]==nums[left-1]) {
left++;
}
}
}
}
return res;
}