Sliding Window
Efficiently process subarrays or substrings of a fixed or variable size.
When to use
- Finding max/min subarray of size k
- Longest substring without repeating characters
- Minimum window containing all characters
Code template
def sliding_window(arr, k):
left = 0
result = 0
window_state = {} # track window contents
for right in range(len(arr)):
# Expand window: add arr[right]
# Shrink window when constraint violated
while False: # replace with invalid condition
# Remove arr[left] from state
left += 1
# Update result
result = max(result, right - left + 1)
return resultpublic int slidingWindow(int[] arr, int k) {
int left = 0, result = 0;
Map<Integer, Integer> windowState = new HashMap<>();
for (int right = 0; right < arr.length; right++) {
// Expand window: add arr[right]
// Shrink window when constraint violated
while (false) { // replace with invalid condition
// Remove arr[left] from state
left++;
}
// Update result
result = Math.max(result, right - left + 1);
}
return result;
}int slidingWindow(vector<int>& arr, int k) {
int left = 0, result = 0;
unordered_map<int, int> windowState;
for (int right = 0; right < (int)arr.size(); right++) {
// Expand window: add arr[right]
// Shrink window when constraint violated
while (false) { // replace with invalid condition
// Remove arr[left] from state
left++;
}
// Update result
result = max(result, right - left + 1);
}
return result;
}