Sliding Window

Sliding Window

·

2 min read

The sliding window algorithm is a technique used in computer science for solving problems involving arrays, strings, or other linear data structures. It involves moving a window (a subarray or substring) of a fixed size through the given data structure and performing some operation on the elements within the window.

How do we know whether to go for SWA?

(SWA) - Sliding Window Algorithm

1) If the problem involves processing a fixed-size window of elements at a time, or if the problem statement explicitly mentions finding patterns, substrings, or subsequences within the data structure, sliding window might be a suitable approach.

2) Data Structure: Sliding window is commonly used with linear data structures such as arrays or strings. If the problem involves such data structures and requires examining contiguous elements or substrings, sliding window could be a good fit.

Let's have a look into the Algorithm then talk where we can implement them How>Where>When

Find a contiguous subarray of length 3 having sum 5

When we apply double or triple for loop we can definelty solve this problem too but the time complexity goes >>>>> O(n^2) and O(n^3)

Let's go with Two Pointers initialized from i = 0; j = 0;

 //initializing two pointers
        int i = 0;
        int j = 0;

 windowSum += nums[j];
            j++;

Let's sum up according to the question

 //Make the window small if the k increases i.e i++ and j++
            if(j - i > k){
                windowSum -= nums[i];
                i++;
            }

            //Update the maximum sum
            if(j - i == k){
                maxSum = Math.max(maxSum, windowSum);
            }

Final Code

package Intermediate;

public class SlidingWindow {

    public static int maxSum(int[] nums, int k){
        if(nums == null || nums.length == 0 || k <= 0 || k > nums.length){
            return 0;
        }

        int maxSum = Integer.MIN_VALUE;
        int windowSum = 0;

        //initializing two pointers
        int i = 0;
        int j = 0;

        //Actual implementation of sliding window
        while (j < nums.length) {
            windowSum += nums[j];
            j++;

            //Make the window small if the k increases i.e i++ and j++
            if(j - i > k){
                windowSum -= nums[i];
                i++;
            }

            //Update the maximum sum
            if(j - i == k){
                maxSum = Math.max(maxSum, windowSum);
            }
        }

        return maxSum;
    }

    public static void main(String[] args) {
        int[] nums = {1, 3, -1, -3, 5, 3, 6, 7};
        int k = 3;
        int result = maxSum(nums, k);
        System.out.println("Maximum sum of subarray of size " + k + ": " + result);
    }
}

LeetCode

239 - leetcode.com/problems/sliding-window-maximu..

2653 - https://leetcode.com/problems/sliding-subarray-beauty/description/

413 - https://leetcode.com/problems/arithmetic-slices/description/

Did you find this article valuable?

Support Thirumalai by becoming a sponsor. Any amount is appreciated!