LeetCode #15 3Sum
Question
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
Approach #1
class Solution {
func threeSum(_ nums: [Int]) -> [[Int]] {
if nums.count < 3 { return [] }
var sortedNums = nums.sorted()
var results = [[Int]]()
for i in 0..<sortedNums.count - 2 {
if i == 0 || sortedNums[i] != sortedNums[i - 1] {
var l = i + 1
var r = sortedNums.count - 1
let target = -sortedNums[i]
while l < r {
let sum = sortedNums[l] + sortedNums[r]
if sum == target {
results.append([sortedNums[i], sortedNums[l], sortedNums[r]])
while l < r, sortedNums[l] == sortedNums[l + 1] { l += 1 }
l += 1
while l < r, sortedNums[r] == sortedNums[r - 1] { r -= 1 }
r -= 1
} else if sum > target {
while l < r, sortedNums[r] == sortedNums[r - 1] { r -= 1 }
r -= 1
} else {
while l < r, sortedNums[l] == sortedNums[l + 1] { l += 1 }
l += 1
}
}
}
}
return results
}
}
Time complexity: O(n^2).
Space complexity: O(n). Sorted array, which has the same length of original array, needs space.
转载请注明出处:http://www.cnblogs.com/silence-cnblogs/p/6893581.html