leetcode

leetcode TwoSum 파이썬 - HashTable

띵지니어 2024. 3. 21. 01:12

https://leetcode.com/problems/two-sum/description/

 

내 코드

# 시간복잡도 O(N^2)
class Solution(object):
    def twoSum(self, nums, target):
        result = []
        for i in range(0, len(nums)):
            for j in range(i+1, len(nums)):
                if nums[i] + nums[j] == target:
                    result += [i, j]
                    return result
# 시간복잡도 O(N)

class Solution(object):
    def twoSum(self, nums, target):
        hash_table = {}  # 해시 테이블 -> 딕셔너리
        for i, num in enumerate(nums):
            complement = target - num  # '짝' 값 계산
            if complement in hash_table:  # 짝 값이 해시 테이블에 있다면, 쌍을 찾음
                return [hash_table[complement], i]
            hash_table[num] = i  # 현재 값과 인덱스를 해시 테이블에 저장
        return []  # 여기는 실제로는 도달하지 않아요, 해답이 항상 존재한다고 가정 했기 때문.

Review

 
난이도는 쉬운? 문제였습니다.

하지만

시간 복잡도를 줄이라고 무언의 압박을 받았네요
^^_^^

2중 for 문으로 모든 경우의 수를 계산해서 알맞은 i, j 값으로 처음에 해결했었는데요

시간 복잡도를 줄이기 위해서 해시테이블 자료구조<딕셔너리>를 사용했습니다.
문제를 보면 one solution 만 있다고 가정을 했기 때문에
target과 짝을 이루는 쌍이 하나 있을 거예요!

주석으로는 이해가 안 될 수 있으니 그림으로도 설명하겠습니다.
예제 nums = [3, 2, 4], target = 6 으로 설명할게요.

이렇게 for문 하나로 O(N)의 시간복잡도로 해결을 할 수 있어요!
문제에 나와있듯이, 하나의 해결책 만 찾을때 용이합니다.

 
질문이나 지적할 사항 있으면 언제든지 의견 주세요
( •́ .̫ •̀ )