Understanding the Two Pointer Algorithm
Based on what I learned from leetcode's crash course in DSA

Understanding the Two Pointer Algorithm

What is a Two Pointer Algorithm?

The two pointer technique is a widely used method for solving array and string problems efficiently. This approach involves using two integer variables (pointers) that traverse an iterable structure (like an array or string). These pointers, often named i and j or left and right, move towards each other or in tandem based on specific logic relevant to the problem at hand.

Common Approaches of the Two Pointer Algorithm

Opposite Ends Approach:

Method: Start one pointer at the beginning (index 0) and the other at the end (index input.length - 1). Move the pointers towards each other until they meet.

Usage: This is commonly used in problems like checking for palindromes or finding pairs in a sorted array that sum up to a target value.

Pseudo Code:

function fn(arr):
    left = 0
    right = arr.length - 1
    
    while left < right:
        Do some logic here
        Decide to move left++, right--, or both        

Simultaneous Traversal:

Method: Use two pointers to traverse two iterables simultaneously, moving each pointer based on specific conditions until both iterables are exhausted.

Usage: Useful in merging two sorted arrays or checking if one string is a subsequence of another.

Pseudo Code

function fn(arr1, arr2):
    i = j = 0
    while i < arr1.length AND j < arr2.length:
        Do some logic here
        Decide to move i++, j++, or both
    
    while i < arr1.length:
        Do some logic here
        i++
    
    while j < arr2.length:
        Do some logic here
        j++        

Complexity and Efficiency

The two pointer algorithm is highly efficient with a typical time complexity of O(n) where n is the size of the input. This efficiency stems from the fact that both pointers move in a controlled manner, ensuring each element is processed at most once. The space complexity is O(1) since only a constant amount of extra space (for the pointers) is used, regardless of input size.

For instance, in palindrome checking, each character is compared only once, leading to a linear runtime. In the case of finding pairs in a sorted array, the algorithm avoids the quadratic time complexity of brute force approaches by leveraging the sorted nature of the array.

Relevance in Computer Science

The two pointer technique is fundamental in computer science, particularly in algorithm design and competitive programming. Its simplicity and efficiency make it a go-to strategy for a wide range of problems involving arrays and strings. Understanding and mastering this technique is crucial for tackling many interview questions and real-world computational problems, highlighting its importance in both academic and practical contexts.

Challenge

Here is an easy problem you can try:

Given an array of string s, reverse the array

Example:

Input: ["r", "e", "v", "e", "r", "s", "e"]
Output: ["e", "s", "r", "e", "v", "e", "r"]
#do this by modifying the input array in place and use the two pointer algorithm you just learned.        


To view or add a comment, sign in

More articles by Ephraim Teodoro

  • The Sliding Window Approach

    What is the Sliding Window Approach? The sliding window approach is a common and efficient technique used to solve…

  • Recursive Algorithms: Why is it relevant?

    Recursion is a key concept in programming that allows you to solve problems by having a function call itself. This…

  • What are algorithms and complexities

    What is an Algorithm? An algorithm is a step-by-step set of instructions that a computer follows to solve a problem. It…

  • Problem Solving Strategy for Coding Interviews

    I learned from McDowell's book "Cracking the Coding Interview" that there is a good strategy for solving problems on…

Explore content categories