Skip to content
ajdevhub
1 min read

#️⃣ Hashing (Hashmaps & Sets)

Hash maps offer O(1) average insert, lookup, and delete. Sets track existence; maps track frequency or mapping.


Core Patterns

PatternToolExample
Existence checkunordered_setDuplicates, anagram detection
Frequency countunordered_map<T,int>Count chars, top-k elements
Two-sum lookupunordered_map<T,int>Find pair that sums to target
Groupingunordered_map<key, vector>Group anagrams by sorted key
Prefix sum + mapunordered_map<int,int>Count subarrays with target sum

Templates

// Frequency count
unordered_map<int, int> freq;
for (int x : arr) freq[x]++;

// Two-sum lookup
unordered_map<int, int> seen; // value → index
for (int i = 0; i < nums.size(); i++) {
    if (seen.count(target - nums[i]))
        return {seen[target - nums[i]], i};
    seen[nums[i]] = i;
}

// Group anagrams
unordered_map<string, vector<string>> groups;
for (string& s : strs) {
    string key = s; sort(key.begin(), key.end());
    groups[key].push_back(s);
}

Complexity

OperationAverageWorst
Insert / Lookup / DeleteO(1)O(n)
SpaceO(n)O(n)