Sliding Window on Arrays in DSA C - Time & Space Complexity
We want to understand how the time needed changes when using the sliding window technique on arrays.
How does the number of steps grow as the array gets bigger?
Analyze the time complexity of the following code snippet.
int maxSumSubarray(int arr[], int n, int k) {
int max_sum = 0, window_sum = 0;
for (int i = 0; i < k; i++) {
window_sum += arr[i];
}
max_sum = window_sum;
for (int i = k; i < n; i++) {
window_sum += arr[i] - arr[i - k];
if (window_sum > max_sum) {
max_sum = window_sum;
}
}
return max_sum;
}
This code finds the maximum sum of any subarray of size k using a sliding window.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Two loops that each run over parts of the array.
- How many times: First loop runs k times, second loop runs (n - k) times.
The total steps grow roughly in a straight line with the size of the array.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 steps |
| 100 | About 100 steps |
| 1000 | About 1000 steps |
Pattern observation: Doubling the array size roughly doubles the work done.
Time Complexity: O(n)
This means the time needed grows in a straight line with the size of the input array.
[X] Wrong: "The sliding window has nested loops, so it must be O(n²)."
[OK] Correct: The loops run one after another, not inside each other, so total steps add up, not multiply.
Understanding sliding window time complexity helps you explain efficient solutions clearly and confidently.
"What if we changed the window size k to vary with n, like k = n/2? How would the time complexity change?"
Practice
sliding window technique on arrays?Solution
Step 1: Understand sliding window concept
The sliding window technique moves a fixed-size window over the array to process subarrays efficiently.Step 2: Identify the main use
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 AQuick Check:
Sliding window = efficient subarray processing [OK]
- Thinking it sorts the array
- Assuming it reverses elements
- Confusing it with finding max of whole array
k elements in C?Solution
Step 1: Check loop range for first k elements
The loop should start at 0 and run while i < k to cover first k elements.Step 2: Verify sum initialization and accumulation
Sum starts at 0 and adds arr[i] for each i in 0 to k-1.Final Answer:
int sum = 0; for(int i = 0; i < k; i++) sum += arr[i]; -> Option CQuick Check:
Loop 0 to k-1 sums first k elements [OK]
- Starting loop at 1 instead of 0
- Adding arr[k] which is outside first k elements
- Initializing sum incorrectly
int arr[] = {1, 3, 2, 6, -1, 4, 1, 8, 2};
int k = 5;
int max_sum = 0, window_sum = 0;
for(int i = 0; i < k; i++) window_sum += arr[i];
max_sum = window_sum;
for(int i = k; i < 9; i++) {
window_sum += arr[i] - arr[i - k];
if(window_sum > max_sum) max_sum = window_sum;
}
printf("%d", max_sum);Solution
Step 1: Calculate initial window sum of first 5 elements
Sum = 1+3+2+6+(-1) = 11Step 2: Slide window and update sums
Next windows:
i=5: sum=11 + 4 - 1 = 14
i=6: sum=14 + 1 - 3 = 12
i=7: sum=12 + 8 - 2 = 18
i=8: sum=18 + 2 - 6 = 14
Max sum found = 18Final Answer:
18 -> Option AQuick Check:
Max sliding window sum = 18 [OK]
- Not subtracting the element leaving the window
- Wrong initial sum calculation
- Off-by-one errors in loop
int arr[] = {2, 1, 5, 1, 3, 2};
int k = 3;
int window_sum = 0;
for(int i = 0; i <= k; i++) window_sum += arr[i];
for(int i = k; i < 6; i++) {
window_sum += arr[i] - arr[i - k];
printf("%d ", window_sum);
}Solution
Step 1: Check first loop range for initial sum
Loop runs i = 0 to i = k (inclusive), so 4 elements summed instead of 3.Step 2: Fix loop condition to sum exactly k elements
Change condition to i < k to sum first 3 elements only.Final Answer:
Change loop condition to i < k in first for loop -> Option DQuick Check:
Initial sum must cover exactly k elements [OK]
- Using <= instead of < in loop condition
- Changing wrong loop's condition
- Assuming initialization error
k, how would you find the minimum sum of any contiguous subarray of size k using the sliding window technique?Solution
Step 1: Calculate initial sum of first k elements
Sum the first k elements to start the sliding window.Step 2: Slide window across array updating sum and track minimum
For each new element, add it and subtract the element leaving the window, update minimum sum if current sum is smaller.Final Answer:
Initialize sum of first k elements, slide window updating sum and track minimum sum found -> Option BQuick Check:
Sliding window tracks sums efficiently to find minimum [OK]
- Sorting array instead of sliding window
- Using nested loops causing inefficiency
- Ignoring elements leaving the window
Ready to prove it?
Pass the test and this pattern moves unknown
