AI EducademyAIEducademy
๐ŸŒณ

AI Foundations

๐ŸŒฑ
AI Seeds

Start from zero

๐ŸŒฟ
AI Sprouts

Build foundations

๐ŸŒณ
AI Branches

Apply in practice

๐Ÿ•๏ธ
AI Canopy

Go deep

๐ŸŒฒ
AI Forest

Master AI

๐Ÿ”จ

AI Mastery

โœ๏ธ
AI Sketch

Start from zero

๐Ÿชจ
AI Chisel

Build foundations

โš’๏ธ
AI Craft

Apply in practice

๐Ÿ’Ž
AI Polish

Go deep

๐Ÿ†
AI Masterpiece

Master AI

๐Ÿš€

Career Ready

๐Ÿš€
Interview Launchpad

Start your journey

๐ŸŒŸ
Behavioral Mastery

Master soft skills

๐Ÿ’ป
Technical Interviews

Ace the coding round

๐Ÿค–
AI & ML Interviews

ML interview mastery

๐Ÿ†
Offer & Beyond

Land the best offer

View All Programsโ†’

Lab

7 experiments loaded
๐Ÿง Neural Network Playground๐Ÿค–AI or Human?๐Ÿ’ฌPrompt Lab๐ŸŽจImage Generator๐Ÿ˜ŠSentiment Analyzer๐Ÿ’กChatbot Builderโš–๏ธEthics Simulator
๐ŸŽฏMock InterviewEnter the Labโ†’
JourneyBlog
๐ŸŽฏ
About

Making AI education accessible to everyone, everywhere

โ“
FAQ

Common questions answered

โœ‰๏ธ
Contact

Get in touch with us

โญ
Open Source

Built in public on GitHub

Get Started
AI EducademyAIEducademy

MIT Licence. Open Source

Learn

  • Academics
  • Lessons
  • Lab

Community

  • GitHub
  • Contribute
  • Code of Conduct
  • About
  • FAQ

Support

  • Buy Me a Coffee โ˜•
  • Terms of Service
  • Privacy Policy
  • Contact
AI & Engineering Academicsโ€บ๐Ÿชจ AI Chiselโ€บLessonsโ€บTwo Pointers and Sliding Window
๐Ÿ‘†
AI Chisel โ€ข Intermediateโฑ๏ธ 15 min read

Two Pointers and Sliding Window

Why Scanning Smartly Matters

Imagine an AI monitoring a live video feed for suspicious activity. It cannot rewatch the entire recording every second - it needs to slide a window of attention across the stream, keeping track of just enough context. That is exactly what the two pointers and sliding window patterns do for sequential data.

Both techniques turn brute-force O(nยฒ) scans into elegant O(n) passes.

Two pointers converging from both ends of an array and a sliding window moving across a data stream
Two pointers shrink the search space; a sliding window maintains a running view.

The Two Pointer Technique

Place two references into a sequence and move them according to a rule. There are two main flavours.

Converging Pointers

Start one pointer at each end and move them inward. Perfect for sorted data.

Classic problem - Pair Sum: Given a sorted array, find two numbers that add to a target.

function pairSum(arr, target):
    left = 0
    right = arr.length - 1
    while left < right:
        sum = arr[left] + arr[right]
        if sum == target: return (left, right)
        if sum < target: left += 1
        else: right -= 1
    return null

Because the array is sorted, moving left right increases the sum, and moving right left decreases it - guaranteeing we never miss a valid pair.

Same-Direction Pointers

Both pointers move forward, but at different speeds. Useful for partitioning or cycle detection.

Example - Remove duplicates in-place: A slow pointer marks the write position; a fast pointer scans ahead.

function removeDuplicates(arr):
    slow = 0
    for fast in 1..arr.length - 1:
        if arr[fast] != arr[slow]:
            slow += 1
            arr[slow] = arr[fast]
    return slow + 1
๐Ÿง Quick Check

In the converging two-pointer technique on a sorted array, what should you do when the current sum is less than the target?

Lesson 1 of 100% complete
โ†Back to program

Discussion

Sign in to join the discussion

Suggest an edit to this lesson

The Sliding Window Pattern

A sliding window maintains a contiguous sub-sequence of size k (fixed) or variable length, updating aggregates incrementally instead of recalculating from scratch.

Fixed-Size Window

Slide a window of exactly k elements across the array.

Example - Maximum sum of any k consecutive elements:

function maxSubarraySum(arr, k):
    windowSum = sum(arr[0..k-1])
    best = windowSum
    for i in k..arr.length - 1:
        windowSum += arr[i] - arr[i - k]
        best = max(best, windowSum)
    return best

Each step adds the new element entering the window and subtracts the one leaving - O(1) per move.

Variable-Size Window

Expand the window to include more data, then shrink it when a constraint is violated.

Example - Longest substring without repeating characters:

function longestUnique(s):
    seen = {}
    left = 0
    best = 0
    for right in 0..s.length - 1:
        if s[right] in seen and seen[s[right]] >= left:
            left = seen[s[right]] + 1
        seen[s[right]] = right
        best = max(best, right - left + 1)
    return best
๐Ÿคฏ
Streaming analytics platforms like Apache Flink use sliding and tumbling windows as first-class primitives - the same concept scaled to millions of events per second.

Real AI Applications

| Pattern | AI Use Case | |---------|------------| | Fixed window | Anomaly detection over the last k sensor readings | | Variable window | Finding the shortest text span containing all query keywords (search engines) | | Converging pointers | Efficient nearest-neighbour checks in sorted embedding dimensions | | Same-direction pointers | Merging sorted result lists from multiple retrieval models |

๐Ÿค”
Think about it:A voice assistant buffers the last 3 seconds of audio to detect a wake word. Which pattern is this - fixed window or variable window? What happens if the wake word is longer than the buffer?

When to Use Which

  • Two pointers (converging): sorted input, pair/triplet search, palindrome checks.
  • Two pointers (same-direction): in-place modifications, fast/slow runner problems.
  • Fixed sliding window: aggregate over a known window size.
  • Variable sliding window: find the smallest or largest window satisfying a condition.
๐Ÿง Quick Check

Which pattern would you choose to find the smallest subarray whose sum exceeds a given value?

๐Ÿค”
Think about it:Could you combine two pointers with a sliding window? Think about problems where you need to find a pair within a rolling window of data - for instance, detecting duplicate transactions within a five-minute window.

Key Takeaways

  1. Two pointers eliminate nested loops by leveraging ordering or partitioning.
  2. Sliding windows maintain running state so each element is processed at most twice.
  3. Both patterns are foundational in real-time AI pipelines - from anomaly detection to search ranking.
๐Ÿง Quick Check

What is the typical time complexity achieved by converting a brute-force nested loop into a two-pointer or sliding-window solution?