Discover how to find the highest number in every group without checking each group again and again!
Why Sliding Window Maximum Using Deque in DSA Go?
Imagine you have a long list of daily temperatures, and you want to find the highest temperature for every 3-day period. Doing this by checking each 3-day group one by one feels like repeating the same work over and over.
Manually checking each group means looking at many numbers again and again. This takes a lot of time and can easily cause mistakes, especially if the list is very long.
Using a sliding window with a deque helps keep track of the highest numbers smartly. It moves through the list just once, remembering only the important numbers, so it finds the maximum quickly without repeating work.
for i := 0; i <= len(nums)-k; i++ { maxVal := nums[i] for j := i+1; j < i+k; j++ { if nums[j] > maxVal { maxVal = nums[j] } } fmt.Println(maxVal) }
deque := []int{}
for i := 0; i < len(nums); i++ {
// Remove smaller elements from the back
// Add current element index to the back
// Remove elements out of window from the front
// Print front of deque as current max
}This method lets you find maximum values in moving windows fast and efficiently, even for huge lists.
Weather apps use this to quickly show the highest temperature in the last few days without slowing down as data grows.
Manual checking repeats work and is slow.
Deque keeps track of important values only.
Sliding window maximum finds results fast in one pass.
Practice
Solution
Step 1: Understand the role of deque
The deque stores indices of elements in the current window, maintaining them in decreasing order of their values to quickly find the maximum.Step 2: Why not other options?
Options B, C, and D do not help in efficiently finding the maximum in each sliding window.Final Answer:
To keep track of indices of elements in the current window in decreasing order of their values -> Option AQuick Check:
Deque stores indices in decreasing order for max [OK]
- Using deque to store values instead of indices
- Sorting the entire array instead of using deque
- Not maintaining decreasing order in deque
Solution
Step 1: Check initialization methods
deque := []int{} creates an empty slice which can be used as a deque.Step 2: Why others are incorrect
make([]int, 5) creates a slice with length 5 filled with zeros, not empty. nil is not initialized. new([]int) returns pointer to nil slice, not usable directly.Final Answer:
deque := []int{} -> Option CQuick Check:
Empty slice initialization = deque := []int{} [OK]
- Using make with length > 0 creates non-empty slice
- Using nil slice without initialization
- Using new([]int) returns pointer, not slice
[1,3,-1,-3,5,3,6,7] with window size 3?Solution
Step 1: Slide window and find max
Windows and max values: [1,3,-1] -> 3, [3,-1,-3] -> 3, [-1,-3,5] -> 5, [-3,5,3] -> 5, [5,3,6] -> 6, [3,6,7] -> 7Step 2: Collect max values in order
The output array is [3, 3, 5, 5, 6, 7].Final Answer:
[3, 3, 5, 5, 6, 7] -> Option AQuick Check:
Sliding window max = [3, 3, 5, 5, 6, 7] [OK]
- Confusing window size or indices
- Taking min instead of max
- Off-by-one errors in window sliding
for i := 0; i < len(nums); i++ {
if len(deque) > 0 && deque[0] <= i-k {
deque = deque[1:]
}
for len(deque) > 0 && nums[deque[len(deque)-1]] < nums[i] {
deque = deque[:len(deque)-1]
}
deque = append(deque, i)
if i >= k-1 {
result = append(result, nums[deque[0]])
}
}Solution
Step 1: Check deque initialization
The code uses deque but does not show initialization. Without initializing deque as an empty slice, appending will cause runtime error.Step 2: Other parts are correct
Conditions and loop indices are standard for sliding window maximum. Append to result after deque update is correct.Final Answer:
Deque is not initialized before the loop -> Option BQuick Check:
Deque must be initialized before use [OK]
- Forgetting to initialize deque slice
- Incorrect window boundary condition
- Appending result too early
nums = [4, 2, 12, 3, 8, 7, 9] and window size 4, what is the sliding window maximum output using deque? Also, explain why deque helps achieve O(n) time complexity.Solution
Step 1: Calculate sliding window max values
Windows and max: [4,2,12,3] -> 12, [2,12,3,8] -> 12, [12,3,8,7] -> 12, [3,8,7,9] -> 9Step 2: Explain deque efficiency
Deque stores indices of elements in decreasing order. Each element is added and removed at most once, so total operations are O(n), avoiding repeated scanning.Final Answer:
[12, 12, 12, 9] -> Option DQuick Check:
Sliding window max = [12, 12, 12, 9], deque gives O(n) [OK]
- Calculating max incorrectly for windows
- Not understanding deque's O(n) benefit
- Confusing window size or indices
Ready to prove it?
Pass the test and this pattern moves unknown
