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;
}