이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다.

문제 정의
두 배열의 교집합 출력
책에서 구현된 코드
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        result: Set = set()
        # 양쪽 모두 정렬
        nums1.sort()
        nums2.sort()
        i = j = 0
        # 투 포인터 우측으로 이동하며 일치 여부 판별
        while i < len(nums1) and j < len(nums2):
            if nums1[i] > nums2[j]:
                j += 1
            elif nums1[i] < nums2[j]:
                i += 1
            else:
                result.add(nums1[i])
                i += 1
                j += 1
        return result
기억해야할 기법
- 포인터 2개로 비교하는 방법도 고려해볼것
내가 구현한 코드
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        def bs(nums, target):
            if len(nums) == 0:
                return False
            l = 0
            r = len(nums) - 1
            while l <= r:
                mid = l + (r-l) // 2
                if target < nums[mid]:
                    r = mid-1
                elif target > nums[mid]:
                    l = mid+1
                else:
                    return True
            return False
        nums1 = sorted(set(nums1))
        nums2 = sorted(set(nums2))
        answer = []
        for n in nums1:
            if bs(nums2, n):
                answer.append(n)
        return answer- 속도는 전체적으로 비슷한듯
- 탐색하기 전에 set으로 중복을 없애는 것과 중복된 값을 포함한 탐색의 결과를 set에 넣는 속도가 비슷하다
 
'책읽기' 카테고리의 다른 글
| [파이썬 알고리즘 인터뷰][이진검색] 2D 행렬 검색2 (0) | 2021.08.13 | 
|---|---|
| [파이썬 알고리즘 인터뷰][이진검색] 두 수의 합2 (0) | 2021.08.13 | 
| [파이썬 알고리즘 인터뷰][이진검색] 회전 정렬된 배열 검색 (0) | 2021.08.13 | 
| [파이썬 알고리즘 인터뷰][이진검색] 이진 검색 (0) | 2021.08.12 | 
| [파이썬 알고리즘 인터뷰] 18장 - 이진 검색 (0) | 2021.08.12 |