Roadmap › Coding Round Practice (DSA in C#) › Module: Arrays and Hashing
Lessons in this course (14)

5. Hash map pattern — Two Sum, frequency, grouping

Intermediate★ Must knowLesson 5 of 14
csharp
// Two Sum — O(n) time, O(n) space
static (int, int)? TwoSum(int[] nums, int target)
{
    var index = new Dictionary<int, int>();          // value -> index
    for (int i = 0; i < nums.Length; i++)
    {
        if (index.TryGetValue(target - nums[i], out var j)) return (j, i);
        index[nums[i]] = i;
    }
    return null;
}

// Group anagrams
static IEnumerable<List<string>> GroupAnagrams(string[] words) =>
    words.GroupBy(w => new string(w.OrderBy(c => c).ToArray())).Select(g => g.ToList());

// Top K frequent elements — PriorityQueue (.NET 6+)
static int[] TopK(int[] nums, int k)
{
    var freq = nums.CountBy(n => n);                 // .NET 9; or GroupBy
    var pq = new PriorityQueue<int, int>();          // min-heap by frequency
    foreach (var (num, count) in freq)
    {
        pq.Enqueue(num, count);
        if (pq.Count > k) pq.Dequeue();
    }
    var result = new int[pq.Count];
    for (int i = result.Length - 1; i >= 0; i--) result[i] = pq.Dequeue();
    return result;
}