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, averageO(1)per hash operation - space:
O(n)— the map holds at most every element