【LeetCode】15. 3Sum 解題報告
15. 3Sum / Medium
Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.
Notice that the solution set must not contain duplicate triplets.
Example 1:
Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1,-1,2],[-1,0,1]]
Example 2:
Input: nums = []
Output: []
Example 3:
Input: nums = [0]
Output: []
Constraints:
0 <= nums.length <= 3000
-10^5 <= nums[i] <= 10^5
Solution: Three Pointers
思路
這題基本上是 Two sum 的變體,其實只要固定一個數就變成 Two Sum 了。
因為求的不是 index 而是數字集合,所以我們可以先排序。
首先嘗試暴力解,需要三個迴圈,會超時,所以我們需要減少搜索空間。
一個迴圈固定一個數,迴圈兩個指標左右包夾剩下的區域,因為有排序過,所以如果目前指標計算出來的值小於 0,代表負數比較大,左邊的指標要右移,反之則是正數比較大,右邊的指標要左移。
找到解的時候,因為結果必須是不重複的,我們可以直接迴圈略過鄰近相同的數。
效能
Complexity
- Time Complexity: O(N^2)
- Space Complexity: O(N^2)
LeetCode Result
- Runtime: 60 ms
- Memory Usage: 19.9 MB
- https://leetcode.com/submissions/detail/530118816/
Code
1 | class Solution { |