#### Introduction

Sliding window problems require you to keep a fixed size window that satisfies a certain criteria and shift or slide the window as soon as a violation is encountered.

#### A Few Examples

*Problem*

Given an array of integers *A* and an integer *limit*, return the size of the longest **non-empty **subarray such that the absolute difference between any two elements of this subarray is less than or equal to *limit. *

*Algorithm*

The key idea is to maintain an ordered multiset of elements and compare the max and the min values to see if they exceed limit. Each time we encounter a violation we will decrease the window size by one beginning from the left hand side. The gap of the largest possible subarray we have seen will remain and at the end the array size - our ending left pointer (i) will give us the answer.

*Problem*

Given an array of integers nums and an integer k. A continuous subarray is called **nice** if there are k odd numbers on it. Return *the number of **nice** sub-arrays*.

*Algorithm*

There are several problems that will ask you to find the number of continuous subarrays containing k properties (odd #s in this example). The key insight to remember here is that to arrive at *exactly *k items which satisfy a certain property, we just have to count the total length of continuous subarrays which satisfy *atmost *k elements and those that satisfy at most k-1 elements and take the difference between two. Where the at most k-1 and the at most k differ means we have exclusive subarrays that only work for the *exactly k case. *Solution follows below:

#### Practice Problems

**MEDIUM**

Count Number of Nice Subarrays

Number of Substrings Containing All Three Characters

Replace the Substring for Balanced String

**HARD**

Shortest Subarray with Sum at least K

Subarrays with K Different Integers