Two Sum
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
Constraints:
2 <= nums.length <= 104-109 <= nums[i] <= 109-109 <= target <= 109- Only one valid answer exists.
Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_hash = {}
for idx in range(len(nums)) :
num = nums[idx]
if target - num in num_hash :
return [idx, num_hash[target - num]]
num_hash[num] = idx
만약 2중 포문을 생각했다면, 쉬운 문제가 되었을 것이다. 우리 한 번 고급지게 풀어보도록 하자. (사실 나도 초보자.)
이중 For문이 아니라 hash를 활용하여 문제를 풀어보자.
일단 기본적으로 덧셈을 한 번 해보자. 문제에서 정답[0,1] 이라고 가정하면, $nums[0] + nums[1] = target$ 이 될 것이다. 이를 $nums[1] = target - nums[0]$ 으로 $nums[0]$을 각각 빼주면 이 식이 완성된다. 이를 활용하는 것이다.
for 루프를 활용하여 idx를 받아오고 현재 수를 num으로 둔 후 target - num 이 딕셔너리 안에 있는지 탐색한다. 이때 탐색 시간 복잡도는 O(1)일 것이다. 아마 처음엔 빈 딕셔너리기 때문에 채워져야 할 텐데 hash[num] = idx 가 되도록 하여 추가한다. val이 키, idx가 값이 된다. 만약 있다면 [idx, hash[target-num]] 값을 하게 되면 두 인덱스가 return 되게 된다. 코드 참조.
'알고리즘 스터디' 카테고리의 다른 글
| [Leetcode/파이썬] 125. Valid Palindrome (1) | 2025.09.22 |
|---|---|
| [Leetcode/파이썬] 242. Valid Anagram (0) | 2025.09.22 |
| [Leetcode/파이썬] 64. Minimum Path Sum (0) | 2025.09.14 |
| [Leetcode/파이썬] Insert Delete GetRandom O(1) (0) | 2025.09.14 |
| [Leetcode/파이썬] 452. Minimum Number of Arrows to Burst Balloons (0) | 2025.09.07 |