3Sum
Total Accepted: 125606
Total Submissions: 653184
Difficulty: Medium
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: The solution set must not contain duplicate triplets.
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 List<List<Integer>> resolve(List<Integer> arr){
List<List<Integer>> list=new ArrayList<List<Integer>>();
Arrays.sort(arr)
for(int i=0;i<arr.length-2;i++){
int start=i+1;
int end=arr.length-1;
List<Integer> result=new ArrayList<Integer>();
while(start<end){
if(arr[i]+arr[start]+arr[end]==0){
result.add(arr[i],arr[start],arr[end]);
list.add(result);
break;
}
else if(arr[i]+arr[start]+arr[end]>0){
end--;
}
else if(arr[i]+arr[start]+arr[end]){
start++;
}
}
}
return list;
}
}
Python:
#coding:utf-8
class Solution:
def wsum(self,arr):
if len(arr)<3:
return None
arr=sorted(arr)
result=[]
for i in xrange(0,len(arr)-2):
start,end=i+1,len(arr)-1
print start,end
while start<end:
if arr[i]+arr[start]+arr[end]==0:
result.append([arr[i],arr[start],arr[end]])
break
elif (arr[i]+arr[start]+arr[end]>0):
end-=1
elif arr[i]+arr[start]+arr[end]<0:
start+=1
return result
if __name__=="__main__":
arr=[-1,0,1,2,-1,-4]
print Solution().wsum(arr)