https://leetcode.com/problems/intersection-of-two-arrays/description/
문제 설명:
두 배열이 주어졌을때 교집합을 찾는 문제
투포인터
- 2개의 배열을 집합으로 받아 정렬한다.
- 배열 각각에 포인터를 두어 값이 같으면 결과 배열에 추가하고
- 배열1 < 배열2 이면 배열1의 포인터값을 증가시켜준다.
- 배열2 > 배열1 이면 배열2의 포인터값을 증가시켜준다.
nums1 = sorted(list(set(nums1)))
nums2 = sorted(list(set(nums2)))
result = []
p1 = p2 = 0
while p1 < len(nums1) and p2 < len(nums2):
if(nums1[p1] == nums2[p2]):
result.append(nums1[p1])
p1 += 1
p2 += 1
else:
if(nums1[p1] < nums2[p2]):
p1 += 1
else:
p2 += 1
return result
in 사용
result = set()
for n1 in nums1:
for n2 in nums2:
if n1 == n2:
result.add(n1)
return result
bisect 모듈 사용
result = set()
nums2.sort()
for n1 in nums1:
i2 = bisect.bisect_left(nums2, n1)
if len(nums2) > 0 and len(nums2) > i2 and n1 == nums2[i2]:
result.add(n1)
return result
투포인터가 제일 빠르다.
'코딩테스트 > LeetCode' 카테고리의 다른 글
[Python][LeetCode] letter Combinations of a phone number(전화번호 문자 조합) (0) | 2024.01.17 |
---|---|
[Python][LeetCode] Climbing Stairs(계단오르기) (0) | 2023.11.04 |
[Python][LeetCode] Search in Rotated Sorted Array(회전 정렬된 배열 검색) (0) | 2023.11.01 |
[Python][LeetCode] Binary Search(이진탐색) (0) | 2023.11.01 |
[Python][LeetCode] Two Sum II (두 수의 합) (0) | 2023.11.01 |