|
3 | 3 | 1. 3 <= nums.length <= 3000
|
4 | 4 | 2. -10^5 <= nums[i] <= 10^5
|
5 | 5 |
|
6 |
| -Time Complexity: |
7 |
| - - O(n^2) (์ ๋ ฌ์ O(n log n), ์ด์ค ๋ฐ๋ณต๋ฌธ์ O(n^2)) |
8 |
| -Space Complexity: |
9 |
| - - O(n) (๊ฒฐ๊ณผ ๋ฆฌ์คํธ) |
| 6 | +Time Complexity: O(n^2) |
| 7 | +- ์ ๋ ฌ์ O(n log n), ์ด์ค ๋ฐ๋ณต๋ฌธ์ O(n^2) |
| 8 | +Space Complexity: O(n) |
| 9 | +- ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๋ ๋ฐ ํ์ํ ๊ณต๊ฐ |
| 10 | +
|
| 11 | +ํ์ด ๋ฐฉ๋ฒ: |
| 12 | +- ํฌ ํฌ์ธํฐ๋ฅผ ํ์ฉํ์ฌ ํฉ์ด 0์ด ๋๋ ์ธ ์ ์กฐํฉ ์ฐพ๊ธฐ |
| 13 | +- ๋ฐฐ์ด ์ ๋ ฌ: ํฌ ํฌ์ธํฐ ์ฌ์ฉ + ์ค๋ณต ์ฒ๋ฆฌ ์ฉ์ด |
| 14 | +- for ๋ฃจํ: ์ฒซ ๋ฒ์งธ ์ซ์ ์ ํ (len(nums)-2๊น์ง) |
| 15 | + - ์ค๋ณต๋ ์ฒซ ๋ฒ์งธ ์ซ์ ๊ฑด๋๋ฐ๊ธฐ |
| 16 | + - left, right ํฌ์ธํฐ ์ค์ |
| 17 | +- while ๋ฃจํ: ๋ ํฌ์ธํฐ๊ฐ ๊ต์ฐจํ์ง ์์์ผ ํจ |
| 18 | + - sum = nums[i] + nums[left] + nums[right] ๊ณ์ฐ |
| 19 | + - sum == 0: ๊ฒฐ๊ณผ ์ถ๊ฐ, ์ค๋ณต ๊ฑด๋๋ฐ๊ธฐ, ์์ชฝ ํฌ์ธํฐ ์ด๋ |
| 20 | + - sum < 0: left ์ฆ๊ฐ (๋ ํฐ ๊ฐ ํ์) |
| 21 | + - sum > 0: right ๊ฐ์ (๋ ์์ ๊ฐ ํ์) |
| 22 | +- ์ต์ข
๊ฒฐ๊ณผ ๋ฐํ |
10 | 23 | """
|
| 24 | +# Brute-force: three nested loops โ O(n^3) |
| 25 | +# Optimized: sort + two pointer โ O(n^2) |
11 | 26 |
|
12 | 27 | class Solution:
|
13 | 28 | def threeSum(self, nums: List[int]) -> List[List[int]]:
|
| 29 | + # Step 1: Sort the array |
| 30 | + # Step 2: Fix one number using for loop |
| 31 | + # Step 3: Use two pointers to find two other numbers |
| 32 | + # - if sum == 0: valid triplet |
| 33 | + # - if sum < 0: move left pointer |
| 34 | + # - if sum > 0: move right pointer |
14 | 35 | nums.sort()
|
15 | 36 | result = []
|
16 | 37 |
|
|
0 commit comments