š Scenario: You are analyzing daily temperatures recorded over a week. You want to find the highest temperature in every 3-day window to understand short-term heat trends.
šÆ Goal: Build a Rust program that uses the sliding window technique to find the maximum temperature in every 3-day window from a list of daily temperatures.
š What You'll Learn
Create a vector called temperatures with exactly these values: 30, 32, 31, 35, 33, 34, 36
Create a variable called window_size and set it to 3
Use a for loop with variable i to slide over temperatures and find the maximum in each 3-day window
Print the resulting vector of maximum temperatures for each window
š” Why This Matters
š Real World
Sliding window technique is used in weather data analysis, stock price monitoring, and real-time sensor data processing to find trends over fixed-size intervals.
š¼ Career
Understanding sliding window algorithms is important for roles in data analysis, software development, and systems engineering where efficient data processing is required.
Progress0 / 4 steps
1
Create the temperature data
Create a vector called temperatures with these exact values: 30, 32, 31, 35, 33, 34, 36
DSA Rust
Hint
Use let temperatures = vec![30, 32, 31, 35, 33, 34, 36]; to create the vector.
2
Set the sliding window size
Create a variable called window_size and set it to 3
DSA Rust
Hint
Use let window_size = 3; to set the window size.
3
Find maximum temperatures in each sliding window
Use a for loop with variable i to slide over temperatures from index 0 to temperatures.len() - window_size. For each window, find the maximum temperature and store it in a vector called max_temps
DSA Rust
Hint
Use slicing &temperatures[i..i + window_size] and iter().max() to find the max in each window.
4
Print the maximum temperatures vector
Print the vector max_temps to display the maximum temperatures for each 3-day window
DSA Rust
Hint
Use println!("{:?}", max_temps); to print the vector.
Practice
(1/5)
1. What is the main purpose of the sliding window technique on arrays?
easy
A. To sort the array in ascending order
B. To efficiently process subarrays of fixed size without recomputing everything
C. To reverse the array elements
D. To find the maximum element in the entire array
Solution
Step 1: Understand the sliding window concept
The sliding window technique moves a fixed-size window over the array to process subarrays efficiently.
Step 2: Identify the purpose
It avoids recomputing sums or other values for each subarray by updating results incrementally.
Final Answer:
To efficiently process subarrays of fixed size without recomputing everything -> Option B
Hint: Think of a moving window that updates results quickly [OK]
Common Mistakes:
Confusing sliding window with sorting
Thinking it reverses the array
Assuming it finds max of whole array only
2. Which Rust code snippet correctly initializes a sliding window of size 3 over a vector nums?
easy
A. for i in 0..nums.len() - 2 { let window = &nums[i..i+3]; }
B. for i in 0..nums.len() { let window = &nums[i..i+3]; }
C. for i in 0..nums.len() - 1 { let window = &nums[i..i+3]; }
D. for i in 0..nums.len() - 3 { let window = &nums[i..i+3]; }
Solution
Step 1: Determine valid loop range for window size 3
Window covers indices i, i+1, i+2, so i+3 must be ⤠nums.len(). Thus, i < nums.len() - 2.
Step 2: Check each option's range
for i in 0..nums.len() - 2 { let window = &nums[i..i+3]; } uses 0..nums.len()-2, which is correct. Others are off by one or more.
Final Answer:
for i in 0..nums.len() - 2 { let window = &nums[i..i+3]; } -> Option A
Quick Check:
Loop till len-2 for size 3 window [OK]
Hint: Window end index = start + size; loop till len - size + 1 [OK]
Common Mistakes:
Using len()-3 which is too small
Looping till len() causing out-of-bounds
Incorrect slice ranges causing panic
3. What is the output of this Rust code?
let nums = vec![1, 3, 5, 7, 9];
let k = 3;
let mut sums = Vec::new();
for i in 0..nums.len() - k + 1 {
let window_sum: i32 = nums[i..i+k].iter().sum();
sums.push(window_sum);
}
println!("{:?}", sums);
medium
A. [3, 5, 7]
B. [1, 3, 5]
C. [9, 15, 21]
D. [7, 9, 11]
Solution
Step 1: Identify windows and sums
Windows of size 3 are: [1,3,5], [3,5,7], [5,7,9]. Their sums are 9, 15, 21 respectively.
Step 2: Confirm output vector
The sums vector collects these sums and prints them as [9, 15, 21].
Final Answer:
[9, 15, 21] -> Option C
Quick Check:
Sum windows = [9, 15, 21] [OK]
Hint: Sum each 3-element slice, slide by one [OK]
Common Mistakes:
Summing wrong slices
Off-by-one in loop range
Confusing sums with elements
4. Find the error in this Rust code that tries to print max sum of sliding window size 2:
let nums = vec![4, 2, 1, 7];
let k = 2;
let mut max_sum = 0;
for i in 0..nums.len() - k {
let sum: i32 = nums[i..i+k].iter().sum();
if sum > max_sum {
max_sum = sum;
}
}
println!("{}", max_sum);
medium
A. Window size k should be 3 instead of 2
B. max_sum should be initialized to i32::MIN instead of 0
C. Sum calculation should use fold instead of iter().sum()
D. Loop range should be 0..nums.len() - k + 1 to include last window
Solution
Step 1: Check loop range for window size 2
Windows are nums[i..i+2], so i must go up to nums.len() - 2 inclusive, meaning 0..nums.len()-1 or 0..nums.len()-k+1.
Step 2: Identify off-by-one error
Current loop ends at nums.len()-k exclusive, missing last window. Correct range is 0..nums.len()-k+1.
Final Answer:
Loop range should be 0..nums.len() - k + 1 to include last window -> Option D
Quick Check:
Loop till len-k+1 for full windows [OK]
Hint: Loop till len - window size + 1 to cover all windows [OK]
Common Mistakes:
Using wrong loop range causing missed windows
Initializing max_sum to 0 causing wrong max if negatives
Unnecessary changes to sum calculation
5. Given an array nums and window size k, how can you find the maximum sum of any subarray of size k using sliding window in Rust efficiently?
hard
A. Calculate sum of first k elements, then slide window by adding next element and subtracting first element of previous window, updating max sum each time
B. Sort the array and sum the last k elements to get maximum sum
C. Use nested loops to sum every subarray of size k and track maximum sum
D. Reverse the array and sum first k elements for maximum sum
Solution
Step 1: Compute initial window sum
Sum the first k elements to get the starting window sum.
Step 2: Slide window and update sums
For each next position, add the new element and subtract the element leaving the window, updating max sum if needed.
Step 3: Avoid recomputing sums fully
This approach avoids nested loops and is efficient with O(n) time complexity.
Final Answer:
Calculate sum of first k elements, then slide window by adding next element and subtracting first element of previous window, updating max sum each time -> Option A
Quick Check:
Sliding window sum update = efficient max sum [OK]
Hint: Add new element, subtract old to update sum fast [OK]
Common Mistakes:
Using nested loops causing slow O(n²) time
Sorting array which changes element order
Reversing array which doesn't help sum
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.