Fundamentals/Patterns/Hash Map — Complement Lookup5 problems· Hash Tables

For each item, look up its complement (target - item) in the map

When to useTwo Sum and variants — pair-finding where you know what to look for

iterative
Hash Map
two_sum
Hashmap Intro
hashmap_intro
Two Sum - Unique Pairs
two_sum_unique_pairs
Pairs of Songs With Total Durations Divisible by 60
pairs_of_songs
Prefix Sum
subarray_sum
INITIALIZE
empty Map of value → index
const seen = new Map();
const counts = {};
const complement = new Set();
const seen = new Set();
const counts = new Array(60).fill(0);
let pairs = 0;
const prefixSums = new Map([[0, 0]]);
let curSum = 0;
TRAVERSE
for each item
for (let i = 0; i < arr.length; i++) {
for (const x of arr) {
for (const num of nums) {
for (const duration of durations) {
for (let i = 0; i < arr.length; i++) {
[COMPLEMENT]
compute complement; check map
const complement = target - arr[i];
if (seen.has(complement)) return [seen.get(complement), i];
counts[x] = (counts[x] || 0) + 1;
if (complement.has(target - num)) {
const pair = num < target - num ? `${num},${target - num}` : `${target - num},${num}`;
seen.add(pair);
}
const remainder = duration % 60;
const complement = (60 - remainder) % 60;
pairs += counts[complement];
curSum += arr[i];
const complement = curSum - target;
if (prefixSums.has(complement)) return [prefixSums.get(complement), i + 1];
store
if not found, store current value
seen.set(arr[i], i);
complement.add(num);
counts[remainder] += 1;
prefixSums.set(curSum, i + 1);
RETURN
result or null
return null;
return counts;
return seen.size;
return pairs;
return [];