Leetcode Top Interview โœจ
GithubLinkedinXOfficial Website
  • Leetcode Top Interview ๐ŸŽฏ
  • Guide to Calculating Algorithm Complexity ๐Ÿš€
  • Topic 1 Array - String
    • 88. Merge Sorted Arrays ๐Ÿงฉ
    • 27. Remove Element ๐Ÿงน
    • 26. Remove Duplicates from Sorted Array ๐Ÿšซ
    • 80. Remove Duplicates from Sorted Array II ๐Ÿšซ๐Ÿšซ
    • 169. Majority Element ๐Ÿ‘‘
    • 189. Rotate Array ๐Ÿ”„
    • 121. Best Time to Buy and Sell Stock ๐Ÿ“ˆ
    • 122. Best Time to Buy and Sell Stock II ๐Ÿ“ˆ๐Ÿ’ฐ
    • 55. Jump Game ๐Ÿƒโ€โ™‚๏ธ
    • 45. Jump Game II ๐Ÿƒโ€โ™‚๏ธ
    • 274. H-Index ๐Ÿ“Š
    • 380. Insert Delete GetRandom O(1) ๐ŸŽฒ
    • 238. Product of Array Except Self ๐Ÿ”„
    • 134. Gas Station โ›ฝ
    • 135. Candy ๐Ÿฌ
    • 42. Trapping Rain Water ๐ŸŒง๏ธ
    • 13. Roman to Integer ๐Ÿ”ข
    • 018 Integer to Roman
    • 58. Length of Last Word ๐Ÿ” 
    • 14. Longest Common Prefix ๐ŸŒฑ
    • 151. Reverse Words in a String ๐Ÿ”„
    • 6. Zigzag Conversion ๐Ÿ”€
    • 28. Find the Index of the First Occurrence in a String ๐Ÿ”„
    • 68. Text Justification ๐Ÿ”„
  • Topic 2 Two Pointers
    • 125. Valid Palindrome ๐Ÿšฆ
    • 392. Is Subsequence ๐Ÿ“
    • 167. Two Sum II - Input Array Is Sorted ๐Ÿ”
    • 11. Container With Most Water ๐Ÿž๏ธ
    • 15. 3Sum ๐ŸŒ
  • Topic 3 Sliding Window
    • 209. Minimum Size Subarray Sum ๐ŸŒ
    • 3. Longest Substring Without Repeating Characters ๐ŸŒ
    • 30. Substring with Concatenation of All Words ๐ŸŒ
    • 76. Minimum Window Substring ๐ŸŒ
  • Topic 4 Matrix
    • 36. Valid Sudoku ๐ŸŒ
    • 54. Spiral Matrix ๐ŸŒ
    • 48. Rotate Image ๐Ÿ”„
    • 73. Set Matrix Zeroes
    • 289. Game of Life ๐Ÿ–ผ๏ธ
  • Topic 5 Hashmap
    • 383. Ransom Note ๐Ÿ”
    • 205. Isomorphic Strings ๐Ÿ”
    • 290. Word Pattern ๐Ÿงฉ
    • 242. Valid Anagram ๐ŸŽข
    • 49. Group Anagrams ๐Ÿคนโ€โ™‚๏ธ
    • 1. Two Sum ๐Ÿ”
    • 202. Happy Number ๐Ÿคฉ
    • 219. Contains Duplicate II ๐Ÿ”
    • 128. Longest Consecutive Sequence ๐Ÿ”
  • Topic 6 Intervals
    • 228. Summary Ranges ๐Ÿ“Š
    • 56. Merge Intervals ๐Ÿ”€
    • 57. Insert Interval ๐Ÿ†•
    • 452. Minimum Number of Arrows to Burst Balloons ๐ŸŽˆ
  • Topic 7 Stack
    • 20. Valid Parentheses ๐Ÿ”
    • 71. Simplify Path ๐Ÿ—บ๏ธ
    • 155. Min Stack ๐Ÿ—ƒ๏ธ
    • 150. Evaluate Reverse Polish Notation ๐Ÿง ๐Ÿ’ป
    • 224. Basic Calculator ๐Ÿงฎ
  • Topic 8 Linked List
    • 141. Linked List Cycle ๐Ÿ”
    • 2. Add Two Numbers ๐Ÿ”ข
    • 21. Merge Two Sorted Lists ๐Ÿ”—
    • 138. Copy List with Random Pointer ๐Ÿ”—
    • 92. Reverse Linked List II ๐Ÿ”„
      • Letโ€™s explain step by step ๐Ÿ‡
    • 25. Reverse Nodes in k-Group ๐Ÿ”„
    • 19. Remove Nth Node From End of List ๐Ÿ—‘๏ธ
    • 82. Remove Duplicates from Sorted List II โŒ๐Ÿ”ข
    • 61. Rotate List ๐Ÿ”„
    • 86. Partition List ๐Ÿ”—
    • 146. LRU Cache ๐Ÿ”—
  • Topic 9 Binary Tree General
    • 104. Maximum Depth of Binary Tree ๐Ÿ”—
    • 100. Same Tree ๐Ÿ”—
    • 226. Invert Binary Tree ๐Ÿ”—
    • 101. Symmetric Tree ๐Ÿ”—
    • 105. Construct Binary Tree from Preorder and Inorder Traversal ๐Ÿ”—
    • 106. Construct Binary Tree from Inorder and Postorder Traversal ๐Ÿ”—
    • 117. Populating Next Right Pointers in Each Node II ๐Ÿ”—
    • 114. Flatten Binary Tree to Linked List ๐Ÿ”—
    • 112. Path Sum ๐Ÿ”—
    • 129. Sum Root to Leaf Numbers ๐Ÿ”—
      • What_is_DFS
    • 124. Binary Tree Maximum Path Sum ๐Ÿ”—
Powered by GitBook
On this page
  • ๐Ÿ“Œ What is Sliding Window?
  • ๐Ÿ’ก Key Idea
  • ๐Ÿ› ๏ธ How to Apply Sliding Window
  • ๐Ÿ“ Example 1: Maximum Sum of Subarray of Size k ๐Ÿ’ฐ
  • Problem
  • Code
  • Explanation ๐Ÿ“
  • ๐Ÿ“ Example 2: Longest Substring Without Repeating Characters ๐Ÿ”‘
  • Problem
  • Code
  • Explanation ๐Ÿ“
  • ๐Ÿ”ฅ Applications of Sliding Window
  • ๐Ÿš€ Why Use Sliding Window?
  • ๐Ÿ Conclusion

Was this helpful?

Topic 3 Sliding Window

Previous15. 3Sum ๐ŸŒNext209. Minimum Size Subarray Sum ๐ŸŒ

Last updated 4 months ago

Was this helpful?

The Sliding Window technique is a highly efficient approach in programming, particularly useful for solving problems involving arrays or strings. This technique optimizes operations on subsets of data to find results like maximum sum, length, or count of elements. Let's break it down step by step! ๐ŸŠโ€โ™‚๏ธ


๐Ÿ“Œ What is Sliding Window?

The Sliding Window technique involves maintaining a "window" that moves across a data structure (usually an array or string). This "window" represents a subset of elements, and it can be:

  • Fixed size: The window size remains constant throughout.

  • Dynamic size: The window size adjusts based on certain conditions.

๐Ÿ’ก Key Idea

Instead of recalculating results for every possible subset, the Sliding Window technique avoids redundant computations by:

  1. Adding the new element entering the window. โž•

  2. Removing the old element leaving the window. โž–

This dramatically reduces computation time and improves efficiency. ๐Ÿš€


๐Ÿ› ๏ธ How to Apply Sliding Window

Follow these general steps to apply the Sliding Window technique:

  1. Initialize a window starting at the beginning of the array or string.

  2. Slide the window across the data:

    • Add new elements entering the window.

    • Remove old elements leaving the window.

  3. Perform calculations on the current window to update the result.

  4. Return the final result after processing all possible windows.


๐Ÿ“ Example 1: Maximum Sum of Subarray of Size k ๐Ÿ’ฐ

Problem

Find the maximum sum of any contiguous subarray of size k in an array.

Code

int maxSumOfSubArray(List<int> arr, int k) {
  int n = arr.length;
  if (n < k) return -1; // Not enough elements

  int maxSum = 0, currentSum = 0;

  // Create the first window
  for (int i = 0; i < k; i++) {
    currentSum += arr[i];
  }
  maxSum = currentSum;

  // Slide the window
  for (int i = k; i < n; i++) {
    currentSum += arr[i] - arr[i - k]; // Add new element, remove old element
    maxSum = max(maxSum, currentSum); // Update max sum
  }

  return maxSum;
}

void main() {
  List<int> arr = [2, 3, 5, 2, 9, 7, 1];
  int k = 3;
  print(maxSumOfSubArray(arr, k)); // Output: 18
}

Explanation ๐Ÿ“

  1. Input: arr = [2, 3, 5, 2, 9, 7, 1], k = 3

  2. Sliding Window Steps:

    • [2, 3, 5] โ†’ sum = 10

    • [3, 5, 2] โ†’ sum = 10

    • [5, 2, 9] โ†’ sum = 16

    • [2, 9, 7] โ†’ sum = 18 โœ…

    • [9, 7, 1] โ†’ sum = 17

  3. Maximum sum: 18


๐Ÿ“ Example 2: Longest Substring Without Repeating Characters ๐Ÿ”‘

Problem

Find the length of the longest substring without repeating characters in a string.

Code

int lengthOfLongestSubstring(String s) {
  int maxLength = 0;
  int start = 0;
  Map<String, int> seen = {};

  for (int end = 0; end < s.length; end++) {
    String currentChar = s[end];

    if (seen.containsKey(currentChar)) {
      start = max(start, seen[currentChar]! + 1); // Update start if char repeats
    }

    seen[currentChar] = end; // Update the last seen position
    maxLength = max(maxLength, end - start + 1); // Update max length
  }

  return maxLength;
}

void main() {
  String s = "abcabcbb";
  print(lengthOfLongestSubstring(s)); // Output: 3
}

Explanation ๐Ÿ“

  1. Input: s = "abcabcbb"

  2. Sliding Window Steps:

    • Start: a โ†’ Length = 1

    • Extend: ab โ†’ Length = 2

    • Extend: abc โ†’ Length = 3 โœ…

    • Repeat: Move start to skip the first a.

    • Final: The longest substring is abc, length = 3.


๐Ÿ”ฅ Applications of Sliding Window

  1. Maximum/Minimum Sum Subarray ๐Ÿ’ต

  2. Longest Substring Problems ๐Ÿ”ค

  3. Counting Subarrays/Substrings ๐Ÿงฎ

  4. Optimizing algorithms for time and space complexity โšก


๐Ÿš€ Why Use Sliding Window?

  • Efficiency: Reduces time complexity from (O(n^2)) to (O(n)) in many problems.

  • Intuitive: Mirrors how we naturally approach subsets visually.

  • Widely Applicable: Used in dynamic programming, searching, and optimization problems.


๐Ÿ Conclusion

The Sliding Window technique is an essential tool for solving many array and string problems. Mastering it can make complex problems much simpler and your solutions more efficient. Keep sliding and coding! ๐ŸŽฏ

Happy Coding !!!

Sliding Window