Bird
Raised Fist0
DSA Pythonprogramming~5 mins

Frequency Counter Pattern Using Hash Map in DSA Python - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Frequency Counter Pattern Using Hash Map
O(n)
Understanding Time Complexity

We want to understand how fast the frequency counter pattern runs when counting items.

How does the time needed grow as the list gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

def frequency_counter(arr):
    freq = {}
    for item in arr:
        if item in freq:
            freq[item] += 1
        else:
            freq[item] = 1
    return freq

This code counts how many times each item appears in the list.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Looping through each item in the list once.
  • How many times: Exactly once for each item (n times if list size is n).
How Execution Grows With Input

As the list gets bigger, the number of steps grows directly with the number of items.

Input Size (n)Approx. Operations
10About 10 checks and updates
100About 100 checks and updates
1000About 1000 checks and updates

Pattern observation: The work grows evenly as the list grows; doubling the list doubles the work.

Final Time Complexity

Time Complexity: O(n)

This means the time to count frequencies grows in a straight line with the number of items.

Common Mistake

[X] Wrong: "Checking if an item is in the frequency map takes time proportional to the list size."

[OK] Correct: Hash maps let us check and update counts in constant time, so each check is very fast regardless of list size.

Interview Connect

Knowing how frequency counting works and its time cost helps you solve many problems efficiently and shows you understand key data structures.

Self-Check

"What if we used a list instead of a hash map to count frequencies? How would the time complexity change?"

Practice

(1/5)
1. What does the frequency counter pattern using a hash map help you do in a list of items?
easy
A. Count how many times each item appears
B. Sort the list in ascending order
C. Remove duplicate items from the list
D. Find the largest item in the list

Solution

  1. Step 1: Understand frequency counting

    The frequency counter pattern counts occurrences of each item in a list using a hash map (dictionary).
  2. Step 2: Compare options

    Only Count how many times each item appears describes counting occurrences. Sorting, removing duplicates, or finding largest are different tasks.
  3. Final Answer:

    Count how many times each item appears -> Option A
  4. Quick Check:

    Frequency counter = count occurrences [OK]
Hint: Frequency counter counts items, not sorts or removes [OK]
Common Mistakes:
  • Confusing frequency counting with sorting
  • Thinking it removes duplicates automatically
  • Assuming it finds max/min values
2. Which of the following is the correct way to create an empty frequency counter using a hash map in Python?
easy
A. freq = []
B. freq = {}
C. freq = ()
D. freq = set()

Solution

  1. Step 1: Identify data structure for frequency counter

    A frequency counter uses a hash map, which in Python is a dictionary, created with curly braces {}.
  2. Step 2: Check options

    freq = {} uses {}, which creates an empty dictionary. Others create list, tuple, or set, which are incorrect here.
  3. Final Answer:

    freq = {} -> Option B
  4. Quick Check:

    Empty dict = {} for frequency counter [OK]
Hint: Use {} to create empty dictionary for frequency counter [OK]
Common Mistakes:
  • Using [] which creates a list, not a dictionary
  • Using () which creates a tuple
  • Using set() which creates a set, not a dict
3. What will be the output of the following code?
def freq_counter(lst):
    freq = {}
    for item in lst:
        freq[item] = freq.get(item, 0) + 1
    return freq

print(freq_counter(['a', 'b', 'a', 'c', 'b', 'a']))
medium
A. {'a': 3, 'b': 2, 'c': 1}
B. {'a': 1, 'b': 1, 'c': 1}
C. {'a': 2, 'b': 2, 'c': 2}
D. Error: KeyError

Solution

  1. Step 1: Count each item in the list

    Loop goes through ['a', 'b', 'a', 'c', 'b', 'a']. 'a' appears 3 times, 'b' 2 times, 'c' 1 time.
  2. Step 2: Use freq.get(item, 0) + 1 to update counts

    freq.get(item, 0) returns current count or 0 if not found, then adds 1.
  3. Final Answer:

    {'a': 3, 'b': 2, 'c': 1} -> Option A
  4. Quick Check:

    Count 'a'=3, 'b'=2, 'c'=1 [OK]
Hint: Use dict.get(key,0)+1 to count frequencies safely [OK]
Common Mistakes:
  • Forgetting to add 1 to count
  • Using freq[item] without get causing KeyError
  • Miscounting occurrences
4. Find the error in this frequency counter code and choose the fix:
def freq_counter(lst):
    freq = {}
    for item in lst:
        if item in freq:
            freq[item] += 1
        else:
            freq[item] = 0
    return freq

print(freq_counter(['x', 'y', 'x']))
medium
A. Initialize freq as a list instead of dict
B. Remove the if-else and use freq[item] += 1
C. No error, code works fine
D. Change freq[item] = 0 to freq[item] = 1

Solution

  1. Step 1: Identify initialization error

    When item is new, freq[item] is set to 0, but it should start at 1 because we found it once.
  2. Step 2: Fix initialization

    Change freq[item] = 0 to freq[item] = 1 to count first occurrence correctly.
  3. Final Answer:

    Change freq[item] = 0 to freq[item] = 1 -> Option D
  4. Quick Check:

    First occurrence count must be 1 [OK]
Hint: First time count must be 1, not 0 [OK]
Common Mistakes:
  • Setting initial count to 0 instead of 1
  • Using list instead of dict for frequency
  • Ignoring the else block
5. Given two lists of integers, write a function using frequency counter pattern to check if the second list contains the same frequency of elements as the first list.
What will be the output of this code?
def same_frequency(lst1, lst2):
    if len(lst1) != len(lst2):
        return False
    freq1 = {}
    freq2 = {}
    for num in lst1:
        freq1[num] = freq1.get(num, 0) + 1
    for num in lst2:
        freq2[num] = freq2.get(num, 0) + 1
    return freq1 == freq2

print(same_frequency([1,2,2,3], [2,1,3,2]))
print(same_frequency([1,2,2,3], [2,1,3,3]))
hard
A. False\nFalse
B. False\nTrue
C. True\nFalse
D. True\nTrue

Solution

  1. Step 1: Build frequency dictionaries for both lists

    freq1 counts {1:1, 2:2, 3:1}, freq2 for first call counts {2:2, 1:1, 3:1} which matches freq1.
  2. Step 2: Compare frequency dictionaries

    For second call, freq2 counts {2:1, 1:1, 3:2} which differs from freq1, so returns False.
  3. Final Answer:

    True False -> Option C
  4. Quick Check:

    Same frequency = True, different frequency = False [OK]
Hint: Compare frequency dicts to check equal element counts [OK]
Common Mistakes:
  • Only comparing lengths, not frequencies
  • Not building frequency for both lists
  • Returning True when frequencies differ
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard