2016年11月30日 星期三

[LeetCode] 15. 3Sum

轉自LeetCode

Given an array S of n integers, are there elements abc 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

沒有留言:

張貼留言