📖 Scenario: You are building a simple tool to find two numbers in a list that add up to a target number. This is useful in many real-life cases like splitting bills or finding matching pairs in shopping.
🎯 Goal: Build a Rust program that finds the first pair of indices of two numbers in a list that add up to a given target using a hash map for fast lookup.
📋 What You'll Learn
Create a vector called nums with the exact values [2, 7, 11, 15]
Create an integer variable called target and set it to 9
Use a HashMap called seen to store numbers and their indices
Use a for loop with variables i and num to iterate over nums.iter().enumerate()
Inside the loop, check if target - num exists in seen and return the pair of indices
Print the result vector of indices
💡 Why This Matters
🌍 Real World
Finding pairs of numbers that add up to a target is useful in finance, shopping discounts, and data analysis.
💼 Career
This problem is a common coding interview question and helps understand hash maps and efficient searching.
Progress0 / 4 steps
1
Create the number list
Create a vector called nums with the exact values [2, 7, 11, 15]
DSA Rust
Hint
Use let nums = vec![2, 7, 11, 15]; to create the vector.
2
Set the target value
Create an integer variable called target and set it to 9
DSA Rust
Hint
Use let target = 9; to set the target number.
3
Find two sum indices using a hash map
Use a HashMap called seen to store numbers and their indices. Use a for loop with variables i and num to iterate over nums.iter().enumerate(). Inside the loop, check if target - num exists in seen and return the pair of indices in a vector called result. If not found, insert num and i into seen. Initialize result as an empty vector before the loop.
DSA Rust
Hint
Use HashMap::new() to create seen. Use nums.iter().enumerate() in the loop. Use seen.get(&complement) to check for complement.
4
Print the result
Print the vector result using println!("{:?}", result)
DSA Rust
Hint
Use println!("{:?}", result); to print the vector.
Practice
(1/5)
1. What is the main purpose of using a hash map in the Two Sum problem classic hash solution?
easy
A. To reverse the array elements
B. To sort the array before searching
C. To store the sum of all pairs
D. To store numbers and their indices for quick lookup
Solution
Step 1: Understand the role of hash map
The hash map stores each number as a key and its index as the value for quick access.
Step 2: Use hash map for complement lookup
For each number, we check if the complement (target - number) exists in the hash map to find the pair.
Final Answer:
To store numbers and their indices for quick lookup -> Option D
Quick Check:
Hash map stores number:index pairs [OK]
Hint: Hash map helps find complements fast by storing indices [OK]
Common Mistakes:
Thinking hash map sorts the array
Trying to store sums instead of indices
Using hash map to reverse elements
2. Which of the following Rust code snippets correctly declares a mutable hash map to solve the Two Sum problem?
easy
A. let map = HashMap::new();
B. let mut map = std::collections::HashMap::new();
C. let mut map = HashMap::new();
D. let map = std::collections::HashMap::new();
Solution
Step 1: Identify mutable hash map declaration
To insert elements, the hash map must be mutable, so use 'let mut'.
Step 2: Use full path or import HashMap
Using 'std::collections::HashMap::new()' is correct if HashMap is not imported.
Final Answer:
let mut map = std::collections::HashMap::new(); -> Option B
Quick Check:
Mutable hash map declaration requires 'mut' [OK]
Hint: Use 'let mut' to allow inserting into hash map [OK]
Common Mistakes:
Forgetting 'mut' keyword for mutable map
Using HashMap without importing or full path
Declaring map immutable when insertions needed
3. What will be the output of the following Rust code snippet for the Two Sum problem?
fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut map = std::collections::HashMap::new();
for (i, &num) in nums.iter().enumerate() {
if let Some(&index) = map.get(&(target - num)) {
return vec![index as i32, i as i32];
}
map.insert(num, i);
}
vec![]
}
fn main() {
let result = two_sum(vec![2, 7, 11, 15], 9);
println!("{:?}", result);
}
medium
A. [2, 3]
B. [1, 0]
C. [0, 1]
D. []
Solution
Step 1: Iterate and check complements
At i=0, num=2, map empty, insert (2,0). At i=1, num=7, complement=9-7=2 found at index 0.
Step 2: Return indices of complement pair
Return vector with indices [0,1] as the pair sums to target 9.
Final Answer:
[0, 1] -> Option C
Quick Check:
Indices of 2 and 7 are [0,1] [OK]
Hint: Check complement in map before inserting current number [OK]
Common Mistakes:
Returning indices in wrong order
Not casting usize to i32 for return
Returning empty vector when pair exists
4. Identify the bug in this Rust Two Sum solution and select the fix:
fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut map = std::collections::HashMap::new();
for (i, num) in nums.iter().enumerate() {
if let Some(&index) = map.get(&(target - num)) {
return vec![index as i32, i as i32];
}
map.insert(num, i);
}
vec![]
}
medium
A. Change 'num' to '*num' in map.insert to match key type
B. Remove 'as i32' casts from return vector
C. Change 'map.get(&(target - num))' to 'map.get(&(target + num))'
D. Declare map as immutable instead of mutable
Solution
Step 1: Check key types in hash map
Keys are i32 values, but 'num' is a reference (&i32), so insert needs dereferenced value.
Step 2: Fix insertion to use dereferenced num
Change 'map.insert(num, i);' to 'map.insert(*num, i);' to insert i32 key, matching get() key type.
Final Answer:
Change 'num' to '*num' in map.insert to match key type -> Option A
Quick Check:
Dereference num when inserting key [OK]
Hint: Dereference iterator item before inserting into hash map [OK]
Common Mistakes:
Inserting reference instead of value as key
Changing target arithmetic incorrectly
Making map immutable causing insert error
5. Given the input array [3, 3, 4, 5] and target 6, what will the Two Sum classic hash solution return and why?
hard
A. [0, 1] because the first two 3's sum to 6
B. [1, 2] because 3 and 4 sum to 7, closest to 6
C. [2, 3] because 4 and 5 sum to 9, which is greater than 6
D. [] because no two numbers sum exactly to 6
Solution
Step 1: Check pairs for target sum
The first element 3 at index 0 is inserted. At index 1, num=3, complement=6-3=3 found at index 0.
Step 2: Return indices of first matching pair
Return [0,1] because these two 3's sum exactly to 6.
Final Answer:
[0, 1] because the first two 3's sum to 6 -> Option A
Quick Check:
First pair summing to target returned [OK]
Hint: Return first found pair that sums to target [OK]
Common Mistakes:
Choosing pairs that don't sum to target
Ignoring duplicate values as valid pairs
Returning empty vector incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.