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] ]<Solution>
這題是 two sum 的衍生題,比較麻煩一點
首先,暴力解一定是TLE,所以不考慮
然後要注意到 input 的數字有可能重複
例如 [-1, -1, -1, 2, 0, 2, 1, 3, 1]
這題的答案會是 [[-1, -1, 2], [-1, 0, 1]],因為題目要求不要有 duplicate triplets
那三個數的相加,是比較難處理的
所以先對 input 做排序,從小到大,然後將問題簡化成找 two sum
a + b + c = 0 => a + b = 0 - c
因此對排序後的 array,開始歷遍找每個位置是否有對應的 a+b
歷遍的時候要避開重複的數字
code 如下
C++
Java
kotlin
沒有留言:
張貼留言