题目:
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:
- Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
- 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)
链接:https://oj.leetcode.com/problems/3sum/
描述:找出三元组使得三个数加起来等于target
解法:排序后再进行两边夹的方法,排序时间复杂度O(nlogn),两边夹复杂度O(n^2),所以时间复杂度是O(n^2)
solution by python:
class Solution:
# @return a list of lists of length 3, [[val1,val2,val3]]
def threeSum(self, num):
if len(num)<3: return []
num.sort();ans=[]
for i in range(0,len(num)-2):
if i!=0 and num[i]==num[i-1]: continue
target = 0-num[i]
low=i+1; high=len(num)-1
while low < high:
if num[low]+num[high] == target:
ans.append([num[i],num[low],num[high]])
low += 1
while low<high and num[low]==num[low-1]: low+=1
elif num[low]+num[high] < target: low+=1
else: high-=1
return ans