📖 Scenario: Imagine you run a small bookstore. You want to count how many copies of each book title you have in your inventory to keep track of stock easily.
🎯 Goal: Build a program that counts the frequency of each book title in a list using a hash map (object in TypeScript).
📋 What You'll Learn
Create an array of book titles with exact values
Create an empty object to store frequencies
Use a for loop to count how many times each title appears
Print the frequency object showing each title and its count
💡 Why This Matters
🌍 Real World
Counting frequencies helps in inventory management, text analysis, and data summarization.
💼 Career
Frequency counters are common in software development for tasks like data processing, analytics, and optimization.
Progress0 / 4 steps
1
Create the list of book titles
Create an array called books with these exact titles: 'The Hobbit', '1984', 'The Hobbit', 'Dune', '1984', 'The Hobbit'.
DSA Typescript
Hint
Use const books = [ ... ] with the exact titles inside the array.
2
Create an empty frequency object
Create an empty object called frequency to store the count of each book title.
DSA Typescript
Hint
Use const frequency: { [key: string]: number } = {}; to create an empty object for counting.
3
Count the frequency of each book title
Use a for loop with variable title to iterate over books. Inside the loop, increase the count of title in frequency by 1. If title is not in frequency, set its count to 1.
DSA Typescript
Hint
Use for (const title of books) and check if frequency[title] exists to update or set it.
4
Print the frequency object
Write console.log(frequency) to display the frequency of each book title.
DSA Typescript
Hint
Use console.log(frequency) to show the final counts.
Practice
(1/5)
1. What is the main purpose of using a frequency counter pattern with a hash map in algorithms?
easy
A. To reverse the order of elements in an array
B. To count how many times each item appears in a collection
C. To remove duplicate items from a list
D. To sort the items in ascending order
Solution
Step 1: Understand frequency counting
The frequency counter pattern counts occurrences of each item in a collection.
Step 2: Recognize hash map usage
A hash map stores each item as a key and its count as the value for quick lookup.
Final Answer:
To count how many times each item appears in a collection -> Option B
Quick Check:
Frequency counter = count items [OK]
Hint: Frequency counter counts occurrences using keys [OK]
Common Mistakes:
Confusing frequency counting with sorting
Thinking it removes duplicates instead of counting
Assuming it reverses arrays
2. Which of the following TypeScript code snippets correctly initializes an empty frequency counter using a hash map?
easy
A. const freq = new Set();
B. const freq = [];
C. const freq: Record = {};
D. const freq = 0;
Solution
Step 1: Identify correct hash map initialization
In TypeScript, an object with string keys and number values is used for frequency counting.
Step 2: Check each option
const freq: Record = {}; uses Record = {} which is correct. Others are array, set, or number, which are incorrect for frequency counting.
Final Answer:
const freq: Record = {}; -> Option C
Quick Check:
Empty object for frequency map [OK]
Hint: Use object or map for frequency counters [OK]
Common Mistakes:
Using array or set instead of object
Initializing frequency counter as a number
Not specifying key-value structure
3. What will be the output of the following TypeScript code?
const arr = ['a', 'b', 'a', 'c', 'b', 'a'];
const freq: Record = {};
for (const char of arr) {
freq[char] = (freq[char] || 0) + 1;
}
console.log(freq);
medium
A. {"a": 3, "b": 2, "c": 1}
B. {"a": 1, "b": 1, "c": 1}
C. [3, 2, 1]
D. Error: freq is not iterable
Solution
Step 1: Loop through array and count frequencies
Each character's count is incremented in freq. 'a' appears 3 times, 'b' 2 times, 'c' 1 time.
Step 2: Output the freq object
console.log prints the object with counts: {"a": 3, "b": 2, "c": 1}.
Final Answer:
{"a": 3, "b": 2, "c": 1} -> Option A
Quick Check:
Count each char correctly [OK]
Hint: Increment count or start at zero for each key [OK]
Common Mistakes:
Printing array instead of object
Not initializing counts to zero
Trying to iterate freq as array
4. Identify the error in the following TypeScript code that tries to count character frequencies:
const str = "hello";
const freq: Record = {};
for (let i = 0; i <= str.length; i++) {
const char = str[i];
freq[char] = (freq[char] || 0) + 1;
}
console.log(freq);
medium
A. freq should be initialized as an array, not object
B. The code is correct and will run without errors
C. char variable should be declared outside the loop
D. Loop condition should be i < str.length, not i <= str.length
Solution
Step 1: Check loop boundary
The loop runs from i = 0 to i <= str.length, which accesses str[str.length] (undefined).
Step 2: Fix loop condition
Change condition to i < str.length to avoid accessing undefined character.
Final Answer:
Loop condition should be i < str.length, not i <= str.length -> Option D
Quick Check:
Loop index must be less than length [OK]
Hint: Use < length, not <= length in loops [OK]
Common Mistakes:
Using <= instead of < in loop condition
Initializing freq as array instead of object
Declaring variables outside loop unnecessarily
5. Given two arrays of numbers, arr1 and arr2, which TypeScript function correctly uses the frequency counter pattern to check if arr2 contains the squares of all elements in arr1 with the same frequency?
hard
A. function sameFrequency(arr1: number[], arr2: number[]): boolean {
const freq1: Record = {};
const freq2: Record = {};
for (const num of arr1) freq1[num] = (freq1[num] || 0) + 1;
for (const num of arr2) freq2[num] = (freq2[num] || 0) + 1;
for (const key in freq1) {
if (freq2[Number(key) ** 2] !== freq1[key]) return false;
}
return true;
}
B. function sameFrequency(arr1: number[], arr2: number[]): boolean {
const freq1: Record = {};
for (const num of arr1) freq1[num] = (freq1[num] || 0) + 1;
for (const num of arr2) {
if (!freq1[num * num]) return false;
}
return true;
}
C. function sameFrequency(arr1: number[], arr2: number[]): boolean {
return arr1.length === arr2.length;
}
D. function sameFrequency(arr1: number[], arr2: number[]): boolean {
const freq1 = new Map();
for (const num of arr1) freq1.set(num, (freq1.get(num) || 0) + 1);
for (const num of arr2) {
if (!freq1.has(num * num)) return false;
}
return true;
}
Solution
Step 1: Build frequency maps for both arrays
freq1 counts elements in arr1, freq2 counts elements in arr2.
Step 2: Check if freq2 has squares of keys in freq1 with same counts
Loop over freq1 keys, verify freq2 has key squared with equal frequency.
Step 3: Return true if all match, else false
If any mismatch found, return false; otherwise, return true.
Final Answer:
Function in Option A correctly implements frequency counter for squares check -> Option A
Quick Check:
Compare frequencies of numbers and their squares [OK]
Hint: Count frequencies, compare keys squared with same counts [OK]
Common Mistakes:
Not comparing frequencies, only presence
Checking squares incorrectly (num * num vs key squared)
Ignoring frequency counts in second array
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.