- Reference
- set ννμ μ΄μ©νμ¬ μ€λ³΅μ κ±Έλ¬μ£Όλ λ°©λ²μ μ¬μ©νλλ° λκ° μ’ μ°μ°νλ€.
- Bardνν
λ¬Όμ΄λ³΄λ $O(1)$μ΄λΌκ³ νλ€.
- μΌλ¨μ μ κ²½μ°μ§ λ§μμΌμ§
Solution
from typing import List
class Solution:
# 3κ° λν΄μ 0μ΄ λλ κ²½μ°μ λ°°μ΄μ κ³μ append
# μμ νμμΌλ‘ νλ €λ©΄ n^3 λ κ±° κ°μλ° ν¬ν¬μΈν°λ‘ νλ² n^2 λ§λ€μ΄ 보μ
def threeSum(self, nums: List[int]) -> List[List[int]]:
set_answer = set()
# ꡬννκΈ° νΈνλλ‘ μ€λ₯Έμ°¨μ μ λ ¬ν΄ λμ
nums.sort()
# μΌλ¨ μ΄ λ°λ³΅λ¬Έμ΄ μ 체 λΌλλ₯Ό μ‘μμ€ μ μλλ‘ νμ
for i, num in enumerate(nums):
if i > 0 and nums[i] == nums[i - 1]:
continue
# nums[i]λ₯Ό μ€μ¬μΌλ‘ [i + 1 : -1]κΉμ§μ μμλ€μ ν¬ν¬μΈν°λ‘ κ°κ° λΉκ΅νλ λ°©λ² μλν΄ λ³΄μ
lt, rt = i + 1, len(nums) - 1
# μ΄λ κ² νλ©΄ n^3μΌλ‘ ν μλ°μ μμ κ±° κ°μλ° ν ..
while lt < rt:
tmp_sum = num + nums[lt] + nums[rt]
if tmp_sum < 0:
lt += 1
elif tmp_sum > 0:
rt -= 1
else:
set_answer.add((num, nums[lt], nums[rt]))
lt += 1
rt -= 1
return list(set_answer)
print(Solution().threeSum([-1, 0, 1, 2, -1, -4]))
Leave a comment