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_sumHashmap Intro
hashmap_introTwo Sum - Unique Pairs
two_sum_unique_pairsPairs of Songs With Total Durations Divisible by 60
pairs_of_songsPrefix Sum
subarray_sumINITIALIZE
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 [];