📖 Scenario: You are analyzing daily sales data for a small store. You want to find how many continuous days had sales that add up exactly to a target number k. This helps you understand sales patterns and plan better.
🎯 Goal: Build a program that counts the number of continuous subarrays in a list of daily sales whose sum equals k. Use a hash map to efficiently track sums.
📋 What You'll Learn
Create a vector called sales with the exact values: 1, 2, 3, 4, 2
Create an integer variable called k and set it to 5
Use a hash map (unordered_map) called prefixSums to store prefix sums and their counts
Implement a loop to find the count of continuous subarrays whose sum equals k
Print the final count
💡 Why This Matters
🌍 Real World
Finding continuous periods where sales meet a target helps businesses analyze trends and plan promotions.
💼 Career
This technique is useful in data analysis, software development, and algorithm design roles where efficient data processing is required.
Progress0 / 4 steps
1
Create the sales data vector
Create a std::vector<int> called sales with these exact values: 1, 2, 3, 4, 2
DSA C++
Hint
Use std::vector<int> sales = {1, 2, 3, 4, 2}; to create the vector.
2
Set the target sum k
Create an integer variable called k and set it to 5
DSA C++
Hint
Write int k = 5; to set the target sum.
3
Count subarrays with sum equal to k using a hash map
Include #include <unordered_map> at the top. Then, inside main(), create an std::unordered_map<int, int> called prefixSums to store prefix sums and their counts. Initialize prefixSums[0] to 1. Use a for loop with variable i to iterate over sales. Keep a running sum in currentSum. For each element, check if currentSum - k exists in prefixSums and add its count to count. Update prefixSums[currentSum] by incrementing it.
DSA C++
Hint
Use a hash map to store counts of prefix sums. Update count when currentSum - k is found.
4
Print the count of subarrays with sum equal to k
Write std::cout << count << std::endl; to print the final count of continuous subarrays whose sum equals k.
DSA C++
Hint
Use std::cout << count << std::endl; to display the result.
Practice
(1/5)
1. What is the main purpose of using a hash map in the Subarray Sum Equals K problem?
easy
A. To keep track of the maximum subarray length
B. To sort the array elements before processing
C. To store the original array elements as keys
D. To store cumulative sums and their frequencies for quick lookup
Solution
Step 1: Understand the problem goal
The problem requires finding subarrays whose sums equal a target value k.
Step 2: Role of hash map in solution
The hash map stores cumulative sums and their counts to quickly check if a previous sum exists that forms a subarray summing to k.
Final Answer:
To store cumulative sums and their frequencies for quick lookup -> Option D
Quick Check:
Hash map stores sums = D [OK]
Hint: Hash map tracks sums to find subarrays fast [OK]
Common Mistakes:
Using hash map to sort elements
Storing array elements as keys instead of sums
Trying to track max length instead of counts
2. Which of the following is the correct C++ syntax to declare a hash map for storing int keys and values?
easy
A. std::unordered_map map;
B. std::map<int> map;
C. unordered_map map;
D. std::hash_map map;
Solution
Step 1: Identify correct hash map declaration
In C++, std::unordered_map<Key, Value> is used for hash maps.
Step 2: Check syntax correctness
std::unordered_map map; uses correct template syntax and namespace. Others have syntax errors or wrong types.
Final Answer:
std::unordered_map map; -> Option A
Quick Check:
Correct unordered_map syntax = A [OK]
Hint: Use std::unordered_map for hash maps [OK]
Common Mistakes:
Missing template brackets <>
Using std::map instead of unordered_map for hash map
Wrong order of template parameters
3. What will be the output of the following C++ code snippet?
std::vector<int> nums = {1, 2, 3};
int k = 3;
int count = 0;
std::unordered_map prefixSumCount;
prefixSumCount[0] = 1;
int sum = 0;
for (int num : nums) {
sum += num;
if (prefixSumCount.find(sum - k) != prefixSumCount.end()) {
count += prefixSumCount[sum - k];
}
prefixSumCount[sum]++;
}
std::cout << count << std::endl;
medium
A. 2
B. 1
C. 3
D. 0
Solution
Step 1: Calculate prefix sums and counts
Prefix sums: 1, 3, 6. Check if (sum - k) exists in map:
- sum=1: 1-3=-2 not found
- sum=3: 3-3=0 found, count=1
- sum=6: 6-3=3 found, count=1+1=2
Step 2: Final count of subarrays with sum k
Count is 2 because subarrays [1,2] and [3] sum to 3.
Final Answer:
2 -> Option A
Quick Check:
Subarrays summing to 3 = 2 [OK]
Hint: Track prefix sums and check sum-k in map [OK]
Common Mistakes:
Not initializing prefixSumCount[0] = 1
Incorrectly updating count
Confusing sum and sum-k keys
4. Identify the bug in the following code snippet for counting subarrays summing to k:
int subarraySum(std::vector<int>& nums, int k) {
std::unordered_map map;
int count = 0, sum = 0;
for (int num : nums) {
sum += num;
if (map.find(sum - k) != map.end()) {
count += map[sum - k];
}
map[sum] = 1;
}
return count;
}
medium
A. count should be incremented by 1 only
B. sum should be reset to 0 inside the loop
C. map[sum] should be incremented, not set to 1
D. map should be a vector instead of unordered_map
Solution
Step 1: Analyze map update logic
Setting map[sum] = 1 overwrites previous counts, losing frequency data.
Step 2: Correct way to update map
We must increment map[sum] to count all occurrences of the prefix sum.
Final Answer:
map[sum] should be incremented, not set to 1 -> Option C
Quick Check:
Increment map[sum] to track frequencies [OK]
Hint: Increment map[sum] to count frequencies, not overwrite [OK]
Common Mistakes:
Overwriting map[sum] instead of incrementing
Resetting sum inside loop incorrectly
Using wrong data structure for map
5. Given an array nums = {3, 4, 7, 2, -3, 1, 4, 2} and k = 7, how many subarrays sum to k? Use the hash map approach to find the count.