This pattern is used when any problem statement has something like calculate(sum , avg, max, math,duplicate) with in subarray,sublist and substring (widow).

#### Technique:

- Keep Increasing the window if the computed value is less than the given criteria.
- Print the computed value if criteria is exactly met.
- keep Decreasing the window if the computed value is more than the given criteria.

General snippet of Code:

int slidingWindowPattern(int[] nums , int k){

int windowStart = 0;

int ComputeValue = 0;

for(int windowEnd = 0; windowEnd < nums.length; windowEnd++){

int endValue = nums[windowEnd];

ComputeValue += endValue;// Keep adding the value

if(windowEnd > k){

int startValue = nums[windowStart];

ComputeValue -= startValue;

}

}

return ComputeValue;

}

#### Example 1 - Easy:

Given an input array nums , find the sum of all subarray of size k.

Input:

nums = [1, 2, 3, 4, 5, 6, 7] k = 3

Output:

result = [6, 9, 12, 15, 18]

#### Explanation:

First Window : 1 + 2 + 3 = 6

Second Window : 2 + 3 + 4 = 9

Third Window : 3 + 4 + 5 = 12

Fourth Window : 4 + 5 + 6 = 15

Fifth Window : 5 + 6 + 7 = 18

#### Solution :

As discussed above ,

- keep increasing the window until the size of the window is less than K by storing the summation of all elements into a computed sum variable .
- If the window size is equal to K then we store into result array .
- If the window is greater than K then we shrink the window by removing the starting window element from the summation variable.

int[] findSumOfSubArrayOfSizeK(int[] nums, int k){

int[] result = new int[nums.length - (k - 1)];

int windowStart = 0;

int ComputeSum = 0;

for(int windowEnd = 0; windowEnd < nums.length; windowEnd++){

int endValue = nums[windowEnd];

ComputeSum += endValue;// Keep Increasing the window if the computed value is less than the given criteria

if(windowEnd >= k - 1){

int startValue = nums[windowStart];

result[windowStart++] = ComputeSum; //Add the computed sum if criteria is met.

ComputeSum -= startValue;//keep Decreasing the window if the computed value is more than the given criteria.

}

}

return result;

}