标签:des style color io os java ar strong for
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 class Solution { public void swap(int []array,int i,int j){ int t=array[i]; array[i]=array[j]; array[j]=t; } public void quickSort(int []array,int start,int end) { if(start>=end) { return ; } int middle=(start+end)/2; swap(array,start,middle); int i=start+1; while(i<=end){ if(array[i]>=array[start]){ break; } i++; } int j=i+1; for(;j<=end;){ while(j<=end) { if(array[j]<array[start]) { break; } j++; } if(j<=end){ swap(array,i,j); i++; j++; } } i--; if(array[i]<array[start]){ swap(array,start,i); } quickSort(array,start,i-1); quickSort(array,i+1,end); } List<List<Integer>> twoSum(int []array,int startIndex,int dest) { int endIndex=array.length-1; List<List<Integer>> result=new LinkedList<List<Integer>>(); while(endIndex>startIndex) { int sum=array[startIndex]+array[endIndex]; if(sum==dest) { List <Integer>p=new LinkedList<Integer>(); p.add(array[startIndex]); p.add(array[endIndex]); result.add(p); for(startIndex++;startIndex<=endIndex;startIndex++) { if(array[startIndex]!=array[startIndex-1]) { break; } } } if(sum>dest) { endIndex--; } if(sum<dest){ startIndex++; } } return result; } public List<List<Integer>> threeSum(int[] num) { List<List<Integer>> result=new LinkedList<List<Integer>>(); if(num==null||num.length<3) { return result; } int []array=new int[num.length]; for(int i=0;i<num.length;i++) { array[i]=num[i]; } quickSort(array,0,array.length-1); for(int i=0;i+2<array.length;){ List<List<Integer>> list=twoSum(array,i+1,0-array[i]); for(List<Integer>p:list) { p.add(0,array[i]); result.add(p); } for(i++;i<array.length;i++){ if(array[i]!=array[i-1]) { break; } } } return result; } }
标签:des style color io os java ar strong for
原文地址:http://blog.csdn.net/jiewuyou/article/details/39250271