일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자연어처리
- GenerativeAI
- LeetCode
- sql코테
- 슬라이딩윈도우
- 구글퀵랩
- 파이썬
- codeup
- dfs
- Python3
- nlp
- 파이썬알고리즘
- 릿코드
- 생성형AI
- medium
- 리트코드
- 니트코드
- 투포인터
- GenAI
- Blazor
- 파이썬기초100제
- stratascratch
- 코드업
- SQL
- slidingwindow
- Microsoft
- two-pointer
- Python
- 알고리즘
- gcp
Archives
- Today
- Total
Tech for good
[Leetcode/Set, TwoPointer] 349. Intersection of Two Arrays 본문
IT/Computer Science
[Leetcode/Set, TwoPointer] 349. Intersection of Two Arrays
Diana Kang 2025. 2. 21. 02:39
풀이1) set 자료구조 사용
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
시간 복잡도 분석
- set(nums1): O(N)
- set(nums2): O(M)
- set1 & set2: O(min(N, M))
- list(...): O(K) (교집합 원소 수를 K라고 가정)
➡️ 최종 시간 복잡도: O(N + M) (매우 효율적)
풀이2) two-pointer 사용
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums1.sort() # nums1 정렬
nums2.sort() # nums2 정렬
i, j = 0, 0 # 투 포인터 초기화
result = set() # 중복 방지를 위한 set 사용
while i < len(nums1) and j < len(nums2):
if nums1[i] < nums2[j]: # nums1이 작으면 i 증가
i += 1
elif nums1[i] > nums2[j]: # nums2가 작으면 j 증가
j += 1
else: # 두 값이 같으면 결과에 추가하고, i와 j 모두 증가
result.add(nums1[i])
i += 1
j += 1
return list(result) # 최종 결과 반환
📌 Two-pointer 풀이 방법
- 두 배열 nums1과 nums2를 오름차순 정렬한다.
- 두 개의 포인터 i와 j를 각각 nums1과 nums2의 첫 번째 요소에서 시작한다.
- 두 포인터를 이동하면서 다음 규칙을 적용한다:
- nums1[i] < nums2[j]: i를 증가 (nums1의 값이 작으므로 더 큰 값을 찾아야 함)
- nums1[i] > nums2[j]: j를 증가 (nums2의 값이 작으므로 더 큰 값을 찾아야 함)
- nums1[i] == nums2[j]: 같은 값이므로 결과 result에 추가하고, i와 j를 모두 증가
- 중복된 값을 피하기 위해 result는 set으로 관리한다.
- 최종적으로 list(result)를 반환한다.
🔹 시간 복잡도 분석
- 정렬 단계: nums1.sort()와 nums2.sort()는 각각 O(N log N)과 O(M log M).
- 투 포인터 탐색: O(N + M) (두 배열을 한 번씩 순회).
➡ 총 시간 복잡도: O(N log N + M log M) (정렬 때문에 set 방법보다 느릴 수 있음)
'IT > Computer Science' 카테고리의 다른 글
[Leetcode/TwoPointer] 443. String Compression (0) | 2025.02.21 |
---|---|
[Leetcode/TwoPointer] 977. Squares of a Sorted Array (0) | 2025.02.21 |
[Leetcode/String Manipulation] 151. Reverse Words in a String (0) | 2025.02.19 |
[Leetcode/TwoPointer] 392. Is Subsequence (0) | 2025.02.18 |
[Leetcode/String Manipulation] 1455. Check If a Word Occurs As a Prefix of Any Word in a Sentence (0) | 2025.02.18 |