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)
代碼如下:(超時)
1 public class Solution { 2 public List<List<Integer>> threeSum(int[] nums) { 3 List<List<Integer>> list1=new ArrayList<>(); 4 List<Integer> list=new ArrayList<>(); 5 Map<List<Integer>,List<Integer>> map=new HashMap<>(); 6 int a=0; 7 8 Arrays.sort(nums); 9 10 for(int i=0;i<=nums.length-3;i++) 11 { 12 if(nums[i]<=0) 13 { 14 list.add(nums[i]); 15 a=nums[i]*(-1); 16 } 17 else break; 18 for(int j=i+1;j<=nums.length-2;j++) 19 { 20 if(nums[j]<=a) 21 { 22 list.add(nums[j]); 23 a=a-nums[j]; 24 for(int k=j+1;k<=nums.length-1;k++) 25 { 26 if(nums[k]>a) 27 break; 28 else if(nums[k]==a) 29 { 30 list.add(nums[k]); 31 if(!map.containsKey(list)) 32 { 33 map.put(list, list); 34 list1.add(list); 35 } 36 break; 37 } 38 39 } 40 } 41 else break; 42 list=new ArrayList<>(); 43 list.add(nums[i]); 44 a=nums[i]*(-1); 45 } 46 list=new ArrayList<>(); 47 } 48 49 return list1; 50 } 51 }