标签:
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:
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2)
超时的做法,先将其排序,一个指针指向队首,一个指向队尾,另一个指针在中间,不断移动指针,看其是否能够满足条件。
public static List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); List<List<Integer>> ans=new ArrayList<List<Integer>>(); int m=nums.length; if(m<3) return ans; int l=0; int a=0; int num0=0; while(a<m){ if(nums[a]<0){ l++; } if(nums[a]==0){ num0++; } a++; } System.out.println(nums); System.out.println(l); if(l+num0==0){ return ans; } if(l+num0==m){ if(nums[m-1]==nums[m-2]&&nums[m-2]==nums[m-3]&&nums[m-3]==0){ List<Integer> temp=new ArrayList<Integer>(); temp.add(nums[0]); temp.add(nums[0]); temp.add(nums[0]); ans.add(temp); } return ans; } int i=0; int k; System.out.println(l); while(i<l){ if(i>=1){ if(nums[i]==nums[i-1]){ i++; continue; } } int j=m-1; while(j>l){ if(j<m-1){ if(nums[j]==nums[j+1]){ j--; continue; } } k=i+1; while(i<k&&k<j){ if(k==i+1&&nums[k]==nums[i]){ if(nums[i]+nums[j]+nums[k]==0){ List<Integer> temp=new ArrayList<Integer>(); temp.add(nums[i]); temp.add(nums[k]); temp.add(nums[j]); ans.add(temp); } } if(nums[k]==nums[j]){ if(nums[i]+nums[j]+nums[k]==0){ List<Integer> temp=new ArrayList<Integer>(); temp.add(nums[i]); temp.add(nums[k]); temp.add(nums[j]); ans.add(temp); } break; } if(nums[k]==nums[k-1]){ k++; continue; } if(nums[i]+nums[j]+nums[k]==0){ List<Integer> temp=new ArrayList<Integer>(); temp.add(nums[i]); temp.add(nums[k]); temp.add(nums[j]); ans.add(temp); } if(nums[i]+nums[j]+nums[k]>0){ break; } System.out.println(i+" "+j+" "+k); k++; /*if(!(i<k&&k<j)) break; */ } j--; } i++; }
标签:
原文地址:http://www.cnblogs.com/gonewithgt/p/4575766.html