Bird
Raised Fist0
DSA Pythonprogramming

Two Sum Problem Classic Hash Solution in DSA Python

Choose your learning style10 modes available
Mental Model
We find two numbers that add up to a target by remembering numbers we've seen before and checking if the partner number is already known.
Analogy: Imagine you want to buy two items that together cost exactly your budget. You keep a list of prices you've seen and check if the price needed to reach your budget is already on your list.
nums: [2, 7, 11, 15]
hash_map: {}

We scan nums left to right, adding each number to hash_map with its index.
For each number, we check if target - number is in hash_map.
Dry Run Walkthrough
Input: nums: [2, 7, 11, 15], target: 9
Goal: Find indices of two numbers that add up to 9
Step 1: Check first number 2, look for 9 - 2 = 7 in hash_map
nums: [2, 7, 11, 15]
hash_map: {}
No 7 found, add 2 with index 0
hash_map: {2:0}
Why: We need to remember 2 to find its partner later
Step 2: Check second number 7, look for 9 - 7 = 2 in hash_map
nums: [2, 7, 11, 15]
hash_map: {2:0}
2 found at index 0, pair found (0,1)
Why: We found the partner 2 that sums with 7 to 9
Result:
Indices: [0, 1]
Annotated Code
DSA Python
from typing import List

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hash_map = {}
        for i, num in enumerate(nums):
            complement = target - num
            if complement in hash_map:
                return [hash_map[complement], i]
            hash_map[num] = i

# Driver code
sol = Solution()
result = sol.twoSum([2, 7, 11, 15], 9)
print(result)
for i, num in enumerate(nums):
iterate over each number with its index
complement = target - num
calculate the needed partner number to reach target
if complement in hash_map:
check if partner number was seen before
return [hash_map[complement], i]
return indices of the two numbers that sum to target
hash_map[num] = i
store current number with its index for future checks
OutputSuccess
[0, 1]
Complexity Analysis
Time: O(n) because we scan the list once and do constant time lookups in the hash map
Space: O(n) because we store up to n numbers in the hash map
vs Alternative: Compared to checking all pairs (O(n^2)), this hash map method is much faster by trading space for speed
Edge Cases
empty list
returns None or no pair found because no numbers exist
DSA Python
for i, num in enumerate(nums):
no two numbers sum to target
function returns None implicitly as no return happens
DSA Python
if complement in hash_map:
multiple pairs possible
returns the first valid pair found
DSA Python
return [hash_map[complement], i]
When to Use This Pattern
When asked to find two elements summing to a target quickly, use a hash map to remember seen numbers and check complements in one pass.
Common Mistakes
Mistake: Checking if current number is in hash map before adding it, causing missing pairs where both numbers are the same
Fix: Check for complement in hash map before adding current number to avoid missing pairs
Summary
Find two indices of numbers that add up to a target using a hash map for fast lookup.
Use when you need to find pairs summing to a target efficiently in one pass.
Remember to check for the complement before adding the current number to the hash map.

Practice

(1/5)
1. What is the main idea behind the classic hash solution for the Two Sum Problem?
easy
A. Use a dictionary to store numbers and their indices for quick lookup
B. Sort the array and use two pointers to find the sum
C. Use nested loops to check every pair of numbers
D. Use recursion to find pairs that add up to the target

Solution

  1. Step 1: Understand the problem requirement

    The Two Sum problem asks to find two numbers in an array that add up to a target value.
  2. Step 2: Explain the hash solution approach

    Using a dictionary (hash map) allows storing each number's index and checking if the complement (target - current number) exists quickly.
  3. Final Answer:

    Use a dictionary to store numbers and their indices for quick lookup -> Option A
  4. Quick Check:

    Hash map lookup = fast pair finding [OK]
Hint: Use a dictionary to find complements quickly [OK]
Common Mistakes:
  • Trying to sort the array which changes indices
  • Using nested loops causing slow performance
  • Not storing indices, only values
2. Which of the following is the correct syntax to check if a key exists in a Python dictionary named seen?
easy
A. if key exists in seen:
B. if key in seen:
C. if seen.has_key(key):
D. if key inside seen:

Solution

  1. Step 1: Recall Python dictionary membership syntax

    In Python, to check if a key exists in a dictionary, use the syntax if key in dict:.
  2. Step 2: Identify correct option

    if key in seen: uses the correct syntax. if key exists in seen: and D are invalid syntax. if seen.has_key(key): is legacy and removed in Python 3.
  3. Final Answer:

    if key in seen: -> Option B
  4. Quick Check:

    Python dict key check = if key in dict [OK]
Hint: Use 'in' keyword to check dictionary keys [OK]
Common Mistakes:
  • Using outdated has_key() method
  • Writing invalid syntax like 'exists in'
  • Confusing keys with values
3. What will be the output of the following code?
def two_sum(nums, target):
    seen = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in seen:
            return [seen[complement], i]
        seen[num] = i
    return []

print(two_sum([2, 7, 11, 15], 9))
medium
A. [0, 1]
B. [1, 2]
C. [2, 3]
D. []

Solution

  1. Step 1: Trace the loop and dictionary updates

    Iteration 0: num=2, complement=7, seen={}, complement not in seen, add 2:0.
    Iteration 1: num=7, complement=2, complement 2 in seen at index 0, return [0,1].
  2. Step 2: Determine returned indices

    The function returns indices [0,1] where nums[0]+nums[1]=2+7=9.
  3. Final Answer:

    [0, 1] -> Option A
  4. Quick Check:

    Indices of 2 and 7 = [0, 1] [OK]
Hint: Check complement in dict before adding current number [OK]
Common Mistakes:
  • Returning values instead of indices
  • Adding current number before checking complement
  • Returning empty list incorrectly
4. The following code tries to solve the Two Sum problem but has a bug. What is the bug?
def two_sum(nums, target):
    seen = {}
    for i, num in enumerate(nums):
        if num in seen:
            return [seen[num], i]
        complement = target - num
        seen[complement] = i
    return []
medium
A. It does not check for complement in dictionary
B. It returns indices in wrong order
C. It stores complement as key instead of the number itself
D. It uses enumerate incorrectly

Solution

  1. Step 1: Analyze dictionary key storage

    The code stores complement as key with current index, but it should store the number as key to check complement later.
  2. Step 2: Identify impact of wrong key storage

    Because complement is stored as key, the lookup for num in seen fails to find correct pairs, causing wrong or no results.
  3. Final Answer:

    It stores complement as key instead of the number itself -> Option C
  4. Quick Check:

    Store number as key, not complement [OK]
Hint: Store numbers as keys, check for complement [OK]
Common Mistakes:
  • Swapping complement and number keys
  • Returning indices before checking complement
  • Not using enumerate properly
5. Given the list nums = [3, 3, 4, 5] and target = 6, what will the classic hash solution return?
Consider the code:
def two_sum(nums, target):
    seen = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in seen:
            return [seen[complement], i]
        seen[num] = i
    return []

print(two_sum(nums, target))
hard
A. []
B. [1, 2]
C. [2, 3]
D. [0, 1]

Solution

  1. Step 1: Trace the loop with duplicates

    Iteration 0: num=3, complement=3, seen={}, complement not in seen, add 3:0.
    Iteration 1: num=3, complement=3, complement 3 in seen at index 0, return [0,1].
  2. Step 2: Understand duplicate handling

    The solution correctly finds the two 3's at indices 0 and 1 that sum to 6.
  3. Final Answer:

    [0, 1] -> Option D
  4. Quick Check:

    Two 3's indices = [0, 1] [OK]
Hint: Duplicates allowed; first pair found is returned [OK]
Common Mistakes:
  • Ignoring duplicates and returning empty list
  • Returning wrong indices due to overwriting
  • Assuming no pair exists when duplicates present
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard