[/dsa/leetcode]

1 - Two Sum

Friday, 4 September 2026

<easy> [problem]

Single pass hash map that trades memory for time on the classic pair-sum problem.

{hashing}{array}

Problem

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.

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].

Input: nums = [3,2,4], target = 6
Output: [1,2]

Input: nums = [3,3], target = 6
Output: [0,1]

Constraints:

  • 2 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9
  • -10^9 <= target <= 10^9
  • Only one valid answer exists.

Approach

Hash Map

Walk the array once. Before inserting nums[i], check whether its complement has already been seen. Checking before inserting is what stops an element from pairing with itself, and it still handles equal values like [3, 3]: the first 3 is in the map by the time the second one looks for it.

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> seen;
        for (int i = 0; i < nums.size(); ++i) {
            auto it = seen.find(target - nums[i]);
            if (it != seen.end()) return {it->second, i};
            seen[nums[i]] = i;
        }
        return {};
    }
};
  • time: O(n) — one pass, average O(1) per hash operation
  • space: O(n) — the map holds at most every element
quantinium © 2026