Sliding Window CheatSheet Explained
Sliding Window CheatSheet Explained
#include <bits/stdc++.h>
using namespace std;
/*
------------------------------------------------------
| 1. Maximum Sum Subarray of Size K |
| Cheat Code: Fixed window of size k, track max sum |
------------------------------------------------------
*/
int maxSumSubarrayOfSizeK(vector<int>& nums, int k) {
int window_sum = 0, max_sum = 0;
for (int i = 0; i < k; i++) window_sum += nums[i];
max_sum = window_sum;
for (int i = k; i < nums.size(); i++) {
window_sum += nums[i] - nums[i - k];
max_sum = max(max_sum, window_sum);
}
return max_sum;
}
/*
------------------------------------------------------------------
| 2. Number of Subarrays with Average >= Threshold |
| Cheat Code: Fixed window, check if average >= threshold |
------------------------------------------------------------------
*/
int numOfSubarrays(vector<int>& nums, int k, int threshold) {
int window_sum = 0, count = 0;
for (int i = 0; i < k; i++) window_sum += nums[i];
if (window_sum / k >= threshold) count++;
for (int i = k; i < nums.size(); i++) {
window_sum += nums[i] - nums[i - k];
if (window_sum / k >= threshold) count++;
}
return count;
}
/*
----------------------------------------------------------
| 3. First Negative Number in Every Window of Size K |
| Cheat Code: Use deque to track first negative in range |
----------------------------------------------------------
*/
vector<int> firstNegativeInWindow(vector<int>& nums, int k) {
deque<int> dq;
vector<int> result;
/*
-------------------------------------------------------
| 4. Maximum of All Subarrays of Size K |
| Cheat Code: Use deque to track max in each window |
-------------------------------------------------------
*/
vector<int> maxOfAllSubarrays(vector<int>& nums, int k) {
deque<int> dq;
vector<int> result;
/*
---------------------------------------------------------------
| 5. Count Occurrences of Anagram |
| Cheat Code: Frequency array, compare each window with goal |
---------------------------------------------------------------
*/
int countAnagrams(string txt, string pat) {
vector<int> freq(26, 0);
for (char ch : pat) freq[ch - 'a']++;
/*
----------------------------------------------------------
| 6. Permutation in String |
| Cheat Code: Same as anagram check, return on match |
----------------------------------------------------------
*/
bool checkInclusion(string s1, string s2) {
if (s1.size() > s2.size()) return false;
vector<int> s1_count(26, 0), s2_count(26, 0);
for (char c : s1) s1_count[c - 'a']++;
/*
-------------------------------------------------------------
| 7. Find All Anagrams in a String |
| Cheat Code: Compare each sliding window with freq of p |
-------------------------------------------------------------
*/
vector<int> findAnagrams(string s, string p) {
vector<int> s_count(26, 0), p_count(26, 0);
vector<int> result;
if (s.size() < p.size()) return result;
return result;
}
/*
----------------------------------------------------------
| 8. Repeated DNA Sequences |
| Cheat Code: Hash each 10-letter substring, count freq |
----------------------------------------------------------
*/
vector<string> findRepeatedDnaSequences(string s) {
unordered_map<string, int> mp;
vector<string> result;
int k = 10;
for (int i = 0; i + k <= s.length(); i++) {
string sub = s.substr(i, k);
if (++mp[sub] == 2) result.push_back(sub);
}
return result;
}
/*
--------------------------------------------------
| 9. Sliding Subarray Beauty (Skipped for now) |
--------------------------------------------------
*/
/*
--------------------------------------------------
| 10. Sliding Window Maximum - Already Covered |
--------------------------------------------------
*/