package leetcode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class demo_15 {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ll =new ArrayList<List<Integer>>();
if(nums.length<3) {
return ll;
}
//对数组进行排序
Arrays.sort(nums);
for(int i=0;i<nums.length-2;i++) {
if(nums[i]>0) {break;}
//排除重复
if(i>0&&nums[i]==nums[i-1]) {continue;}
int left=i+1;
int right=nums.length-1;
while(left<right) {
if(left<right&&nums[left]+nums[right]+nums[i]==0) {
List<Integer> l=new ArrayList<Integer>();
l.add(nums[i]);
l.add(nums[left]);
l.add(nums[right]);
ll.add(l);
//排除重复
while(left<right&&nums[right]==nums[right-1]) {
right=right-1;
}
//排除重复
while(left<right&&nums[left]==nums[left+1]) {
left=left+1;
}
right=right-1;
left=left+1;
}
//如果三数之和大于0就调整右边界
if(left<right&&nums[left]+nums[right]+nums[i]>0) {
right=right-1;
}
//如果三数之和小于0就调整左边界
if(left<right&&nums[left]+nums[right]+nums[i]<0) {
left=left+1;
}
}
}
System.out.println(ll);
return ll;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_15 d15=new demo_15();
int[] nums= {-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6};
d15.threeSum(nums);
}
}