📖 Scenario: You are working with a list of numbers representing daily temperatures recorded over a week. You want to find the first and last day a specific temperature was recorded.
🎯 Goal: Build a Rust program that finds the first and last position of a given temperature in a list.
📋 What You'll Learn
Create a vector called temperatures with exact values: [23, 25, 23, 22, 25, 23, 24]
Create a variable called target and set it to 23
Use a for loop with index i to find the first and last occurrence of target in temperatures
Print the first and last occurrence indices in the format: First occurrence: X and Last occurrence: Y
💡 Why This Matters
🌍 Real World
Finding first and last occurrences is useful in analyzing time series data, logs, or any ordered data to detect events or patterns.
💼 Career
This skill helps in debugging, data analysis, and building efficient search features in software development.
Progress0 / 4 steps
1
Create the temperature list
Create a vector called temperatures with these exact values: [23, 25, 23, 22, 25, 23, 24]
DSA Rust
Hint
Use let temperatures = vec![23, 25, 23, 22, 25, 23, 24]; to create the vector.
2
Set the target temperature
Create a variable called target and set it to 23
DSA Rust
Hint
Use let target = 23; to set the target temperature.
3
Find first and last occurrence
Use a for loop with index i to find the first and last occurrence of target in temperatures. Create variables first and last to store these positions. Initialize first to None and last to None. Update them inside the loop.
DSA Rust
Hint
Loop over indices with for i in 0..temperatures.len(). Check if temperatures[i] == target. Use first.is_none() to set first once. Update last every time.
4
Print the results
Print the first and last occurrence indices using println! in this exact format: First occurrence: X and Last occurrence: Y. Use unwrap() on first and last.
DSA Rust
Hint
Use println!("First occurrence: {}", first.unwrap()); and similarly for last.
Practice
(1/5)
1. What does the "First and Last Occurrence of Element" problem ask you to find in a list?
easy
A. The first and last positions where a given element appears
B. The sum of all elements in the list
C. The maximum and minimum values in the list
D. The number of unique elements in the list
Solution
Step 1: Understand the problem statement
The problem asks to find the first and last positions of a specific element in a list.
Step 2: Identify what is required
We need to locate the earliest and latest index where the element appears.
Final Answer:
The first and last positions where a given element appears -> Option A
Quick Check:
Positions = first and last occurrence [OK]
Hint: Look for earliest and latest index of element [OK]
Common Mistakes:
Confusing with sum or count of elements
Looking for max/min values instead
Ignoring the order of occurrences
2. Which Rust code snippet correctly finds the first occurrence index of element target in vector v?
easy
A. v.iter().position(|&x| x == target)
B. v.iter().find(|&&x| x == target)
C. v.iter().filter(|&&x| x == target).count()
D. v.iter().last().position(|&x| x == target)
Solution
Step 1: Understand Rust iterator methods
The position method returns the index of the first element matching the condition.
Step 2: Check each option
v.iter().position(|&x| x == target) uses position correctly to find the first occurrence index. v.iter().find(|&&x| x == target) returns an Option<&T>, not index. v.iter().filter(|&&x| x == target).count() counts matches, not index. v.iter().last().position(|&x| x == target) is invalid because last() returns an element, not an iterator.
Final Answer:
v.iter().position(|&x| x == target) -> Option A
Quick Check:
position() returns first index [OK]
Hint: Use .position() to get first index [OK]
Common Mistakes:
Using find() which returns element, not index
Using count() which returns number of matches
Trying to call position() after last() which is invalid
3. What is the output of this Rust code?
let v = vec![2, 3, 5, 3, 7];
let target = 3;
let first = v.iter().position(|&x| x == target);
let last = v.iter().rposition(|&x| x == target);
println!("[{:?}, {:?}]", first, last);
medium
A. [Some(2), Some(3)]
B. [Some(1), Some(4)]
C. [None, None]
D. [Some(1), Some(3)]
Solution
Step 1: Find first occurrence of 3 in vector
Vector is [2, 3, 5, 3, 7]. The first 3 is at index 1.
Step 2: Find last occurrence of 3 in vector
The last 3 is at index 3.
Final Answer:
[Some(1), Some(3)] -> Option D
Quick Check:
First = 1, Last = 3 [OK]
Hint: Use position() and rposition() for first and last [OK]
Common Mistakes:
Confusing indices of first and last occurrences
Using wrong iterator methods
Forgetting that indices start at 0
4. Identify the error in this Rust code that tries to find the last occurrence of target in vector v:
let last = v.iter().position(|&x| x == target).unwrap();
println!("{}", last);
medium
A. unwrap() causes panic if element not found
B. v.iter() cannot be used with position()
C. Using position() finds first, not last occurrence
D. Missing semicolon after unwrap()
Solution
Step 1: Understand what position() returns
position() returns the index of the first element matching the condition, not the last.
Step 2: Identify correct method for last occurrence
To find the last occurrence, rposition() should be used instead of position().
Final Answer:
Using position() finds first, not last occurrence -> Option C
Quick Check:
position() = first occurrence, not last [OK]
Hint: Use rposition() for last occurrence, not position() [OK]
Common Mistakes:
Using position() for last occurrence
Ignoring unwrap() panic possibility
Thinking iter() can't use position()
5. Given a sorted vector v with possible duplicates, which approach efficiently finds the first and last occurrence of target using binary search in Rust?
hard
A. Use find() method twice with different closures
B. Use two binary searches: one for first occurrence, one for last occurrence
C. Use a single linear scan from start to end
D. Use position() and rposition() on the entire vector
Solution
Step 1: Understand the vector is sorted with duplicates
Binary search can be used to find positions efficiently in sorted data.
Step 2: Use two binary searches for first and last occurrence
One binary search finds the first index where target appears, another finds the last index.
Final Answer:
Use two binary searches: one for first occurrence, one for last occurrence -> Option B
Quick Check:
Binary search twice for first and last [OK]
Hint: Binary search twice for first and last occurrence [OK]
Common Mistakes:
Using linear scan on large sorted vector
Using position() which is linear time
Trying to find both occurrences in one binary search
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.