두 개의 합 문제
array = [1,2,3,4,5]
targetSum = 5
순진한 접근
이 기술에는 두 개의 for 루프를 사용하여 대상 합계를 찾기 위해 배열을 반복하는 작업이 포함됩니다. 이 방법의 시간 복잡도는 O(n^2)이고 공간 복잡도는 O(1)입니다.
def twoNumberSum(array, targetSum):
for i in range(len(array)):
for j in range(len(array)):
if array[i] + array[j] == targetSum and array[i] != array[j]:
return [array[i], array[j]]
return []
twoNumberSum(array, targetSum)
[1, 4]
두 포인터 기술
이 기술에는 배열의 시작 부분과 끝 부분에 하나씩 두 개의 포인터가 포함됩니다. 두 포인터의 값이 대상보다 작으면 왼쪽 포인터를 오른쪽으로 이동하고 값이 더 크면 오른쪽 포인터를 왼쪽으로 이동합니다.
시간 복잡도는 O(nlog(n))이고 공간 복잡도는 O(1)입니다.
def pointerSum(arr, tar):
l = 0
r = len(arr) - 1
while l < r:
if arr[l] + arr[r] == tar:
return [ arr[l], arr[r] ]
if arr[l] + arr[r] < tar:
l += 1
if arr[l] + arr[r] > tar:
r -= 1
return []
pointerSum(array, targetSum)
[1, 4]
해시맵 기법
이 기술은 배열을 해시 맵에 저장한 다음 해시 맵의 상수 조회 기능을 사용하여 해당하는 두 합 수를 찾습니다.
def hashSum(arr, tar):
hashmap = {}
for i in range(len(arr)):
hashmap[i] = arr[i]
complement = tar - arr[i]
if complement in hashmap.values() and complement != arr[i]:
return [ arr[i], complement]
return []
hashSum(array, targetSum)
[3, 2]
Reference
이 문제에 관하여(두 개의 합 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eteimz/the-two-sum-problem-874텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)