|
| 1 | +// LeetCode: https://leetcode.com/problems/3sum/description/ |
| 2 | +// Hint: Start from TwoSum, use sorting |
| 3 | + |
| 4 | +class Solution { |
| 5 | + func threeSum(_ nums: [Int]) -> [[Int]] { |
| 6 | + guard nums.count >= 3 else { |
| 7 | + return [] |
| 8 | + } |
| 9 | + nums.sorted() |
| 10 | + var idxArr: [[Int]] = [] |
| 11 | + var pair: [[Int]] = [] |
| 12 | + var num1: [Int] = [] |
| 13 | + for idx1 in 0..<nums.count { |
| 14 | + if num1.contains(nums[idx1]) { |
| 15 | + break |
| 16 | + } |
| 17 | + num1.append(nums[idx1]) |
| 18 | + for idx2 in idx1+1..<nums.count { |
| 19 | + if pair.contains([nums[idx1], nums[idx2]].sorted()) { |
| 20 | + continue |
| 21 | + } else { |
| 22 | + pair.append([nums[idx1], nums[idx2]].sorted()) |
| 23 | + idxArr.append([idx1, idx2]) |
| 24 | + } |
| 25 | + } |
| 26 | + } |
| 27 | + var output: [[Int]] = [] |
| 28 | + for i in 0..<nums.count { |
| 29 | + for pair in idxArr { |
| 30 | + if i == pair[0] || i == pair[1] { |
| 31 | + continue |
| 32 | + } |
| 33 | + |
| 34 | + if nums[i] + nums[pair[0]] + nums[pair[1]] == 0, !output.contains([nums[i], nums[pair[0]], nums[pair[1]]].sorted()) { |
| 35 | + output.append([nums[i], nums[pair[0]], nums[pair[1]]].sorted()) |
| 36 | + } |
| 37 | + } |
| 38 | + } |
| 39 | + return output |
| 40 | + } |
| 41 | +} |
| 42 | + |
| 43 | +let solution = Solution() |
| 44 | +print("\(solution.threeSum([-1, 0, 1, 2, -1, -4]))") |
| 45 | +print("---------------------------------") |
| 46 | +/** |
| 47 | + The solution set is: |
| 48 | + [ |
| 49 | + [-1, 0, 1], |
| 50 | + [-1, -1, 2] |
| 51 | + ] |
| 52 | + */ |
| 53 | +print("\(solution.threeSum([-1,0,1,0]))") |
| 54 | +print("---------------------------------") |
| 55 | +/** |
| 56 | + The solution set is: |
| 57 | + [ |
| 58 | + [-1, 0, 1] |
| 59 | + ] |
| 60 | + */ |
| 61 | +print("\(solution.threeSum([3,0,-2,-1,1,2]))") |
| 62 | +print("---------------------------------") |
| 63 | +/** |
| 64 | + The solution set is: |
| 65 | + [ |
| 66 | + [-2, -1, 3], |
| 67 | + [-2, 0, 2], |
| 68 | + [-1, 0, 1] |
| 69 | + ] |
| 70 | + */ |
| 71 | +let longArray1 = [-2,10,-14,11,5,-4,2,0,-10,-10,5,7,-11,10,-2,-5,2,12,-5,14,-11,-15,-5,12,0,13,8,7,10,6,-9,-15,1,14,11,-9,-13,-10,6,-8,-5,-11,6,-9,14,11,-7,-6,8,3,-7,5,-5,3,2,10,-6,-12,3,11,1,1,12,10,-8,0,8,-5,6,-8,-6,8,-12,-14,7,9,12,-15,-12,-2,-4,-4,-12,6,7,-3,-6,-14,-8,4,4,9,-10,-7,-4,-3,1,11,-1,-8,-12,9,7,-9,10,-1,-14,-1,-8,11,12,-5,-7] |
| 72 | +print(longArray1.count) |
| 73 | +print("\(solution.threeSum(longArray1))") // Test time limit |
| 74 | +print("---------------------------------") |
| 75 | +let longArray2 = [12,-14,-5,12,-2,9,0,9,-3,-3,-14,-6,-4,13,-11,-8,0,5,-7,-6,-10,-13,-7,-14,-3,0,12,5,-8,7,3,-11,0,6,9,13,-8,-6,7,4,6,0,13,-13,-1,9,-13,6,-1,-13,-15,-4,-11,-15,-11,-7,1,-14,13,8,0,2,4,-15,-15,-2,5,-8,7,-11,11,-10,4,1,-15,10,-5,-13,2,1,11,-6,4,-15,-5,8,-7,3,1,-9,-4,-14,0,-15,8,0,-1,-2,7,13,2,-5,11,13,11,11] |
| 76 | +print(longArray2.count) |
| 77 | +print("\(solution.threeSum(longArray2))") // Test time limit |
| 78 | +print("---------------------------------") |
| 79 | +print("\(solution.threeSum([-2,0,1,1,2]))") |
| 80 | +/** |
| 81 | + The solution set is: |
| 82 | + [ |
| 83 | + [-2,0,2], |
| 84 | + [-2,1,1] |
| 85 | + ] |
| 86 | +*/ |
0 commit comments