정수 배열이 있다고 가정합니다. 두 정수의 인덱스를 반환해야 하며, 이를 더하면 주어진 특정 목표에 도달할 수 있습니다. 여기에서는 어레이에 항상 하나의 고유한 솔루션이 있으므로 동일한 대상에 대한 두 개의 인덱스 세트가 존재하지 않는다는 가정을 합니다.
예를 들어 배열이 A =[2, 8, 12, 15]이고 목표 합계가 20이라고 가정합니다. 그러면 A[1] + A[2] =20과 같이 인덱스 1과 2를 반환합니다.
이 문제를 해결하기 위해 배열의 각 요소를 반복합니다. 따라서 이 문제를 해결하려면 다음 단계를 따르세요.
- res라는 결과를 저장할 하나의 지도 정의
- 0 ~ n – 1 범위의 인덱스 i의 경우(여기서 n은 배열의 요소 수)
- 대상 - A[i]가 res
- 에 있는 경우
- res[target − A[i]] 및 i를 인덱스로 반환
- 그렇지 않으면 res[A[i]] − =i와 같이 res에 i를 넣습니다.
- 대상 - A[i]가 res
더 나은 이해를 위해 구현을 살펴보겠습니다.
예
class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ required = {} for i in range(len(nums)): if target - nums[i] in required: return [required[target - nums[i]],i] else: required[nums[i]]=i input_list = [2,8,12,15] ob1 = Solution() print(ob1.twoSum(input_list, 20))
입력
input_list = [2,8,12,15] target = 20
출력
[1, 2]