Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Two Pointer Technique on Arrays in DSA Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Two Pointer Technique on Arrays?
It is a method where two pointers start at different positions in an array and move towards each other or in the same direction to solve problems efficiently.
Click to reveal answer
beginner
When do we use the Two Pointer Technique?
We use it when we want to find pairs, subarrays, or conditions involving two elements in a sorted or unsorted array without using extra space.
Click to reveal answer
beginner
How do the pointers move in the Two Pointer Technique?
Usually, one pointer starts at the beginning and the other at the end. They move towards each other based on conditions until they meet or cross.
Click to reveal answer
intermediate
Example problem: Find if there is a pair in a sorted array that sums to a target value. How does Two Pointer Technique help?
Start one pointer at the start and one at the end. If sum is less than target, move start pointer forward. If sum is more, move end pointer backward. Repeat until pair found or pointers cross.
Click to reveal answer
intermediate
What is the time complexity advantage of Two Pointer Technique over nested loops?
Two Pointer Technique often reduces time complexity from O(n²) to O(n) by avoiding nested loops and scanning the array with two pointers in a single pass.
Click to reveal answer
In the Two Pointer Technique, where do the pointers usually start in a sorted array?
ABoth at the end
BBoth at the start
CRandom positions
DOne at the start, one at the end
What is a common use case for the Two Pointer Technique?
AFinding the maximum element
BSorting an array
CFinding pairs with a given sum in a sorted array
DReversing an array
What is the main benefit of using Two Pointer Technique over nested loops?
AReduces time complexity from O(n²) to O(n)
BUses more memory
CMakes code longer
DSlower execution
If the sum of elements at two pointers is less than the target, what should you do?
AMove the start pointer forward
BMove the end pointer backward
CStop the search
DMove both pointers backward
Can Two Pointer Technique be used on unsorted arrays without sorting?
AOnly for arrays of size 2
BNo, it requires sorted arrays
COnly if array has duplicates
DYes, always
Explain the Two Pointer Technique and how it helps solve array problems efficiently.
Think about how two pointers move from opposite ends to find pairs or conditions.
You got /4 concepts.
    Describe a step-by-step approach to find if a sorted array has two numbers that add up to a target using Two Pointer Technique.
    Start with pointers at start and end, then adjust based on sum.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main idea behind the Two Pointer Technique when used on arrays?
      easy
      A. Use two indices moving towards each other or in the same direction to solve problems efficiently
      B. Use two nested loops to compare every pair of elements
      C. Sort the array first and then use binary search
      D. Use recursion to divide the array into two parts

      Solution

      1. Step 1: Understand the technique

        The two pointer technique uses two indices (pointers) to traverse the array, often starting from opposite ends or the same end.
      2. Step 2: Purpose of two pointers

        This helps solve problems like finding pairs, removing duplicates, or partitioning without extra space and in linear time.
      3. Final Answer:

        Use two indices moving towards each other or in the same direction to solve problems efficiently -> Option A
      4. Quick Check:

        Two pointers = two indices moving efficiently [OK]
      Hint: Think of two fingers scanning array ends or start [OK]
      Common Mistakes:
      • Confusing with nested loops approach
      • Assuming sorting is always required
      • Thinking recursion is part of two pointers
      2. Which of the following is the correct syntax to initialize two pointers left and right for an array arr in JavaScript?
      easy
      A. var left = 1, right = arr.length;
      B. let left = arr.length, right = 0;
      C. const left = arr.length - 1, right = 0;
      D. const left = 0, right = arr.length - 1;

      Solution

      1. Step 1: Understand pointer initialization

        For two pointers starting at the array ends, left starts at 0 (start), right at arr.length - 1 (end).
      2. Step 2: Check each option

        const left = 0, right = arr.length - 1; correctly sets left = 0 and right = arr.length - 1. Others have incorrect indices.
      3. Final Answer:

        const left = 0, right = arr.length - 1; -> Option D
      4. Quick Check:

        Start pointer at 0, end pointer at length-1 [OK]
      Hint: Start left at 0 and right at last index [OK]
      Common Mistakes:
      • Setting right pointer to arr.length (out of bounds)
      • Swapping left and right initialization
      • Using 1-based indexing instead of 0-based
      3. What will be the output of the following JavaScript code?
      const arr = [1, 2, 3, 4, 5];
      let left = 0;
      let right = arr.length - 1;
      const result = [];
      while (left <= right) {
        if (arr[left] + arr[right] === 6) {
          result.push([arr[left], arr[right]]);
          left++;
          right--;
        } else if (arr[left] + arr[right] < 6) {
          left++;
        } else {
          right--;
        }
      }
      console.log(result);
      medium
      A. [[2,4],[3,3]]
      B. [[1,5],[3,3]]
      C. [[1,5],[2,4],[3,3]]
      D. [[1,5],[2,4]]

      Solution

      1. Step 1: Trace the two pointers and sums

        Initially left=0 (1), right=4 (5), sum=6 -> push [1,5], move left=1, right=3.
        Now left=1 (2), right=3 (4), sum=6 -> push [2,4], move left=2, right=2.
        Now left=2 (3), right=2 (3), sum=6 -> push [3,3], move left=3, right=1 but loop ends since left > right.
      2. Step 2: Check the result array

        Result contains [[1,5],[2,4],[3,3]]. But note the condition left <= right allows the middle element pairing only if left equals right.
        Here, at left=2 and right=2, sum=6, so [3,3] is added.
      3. Final Answer:

        [[1,5],[2,4],[3,3]] -> Option C
      4. Quick Check:

        Pairs summing to 6 = [[1,5],[2,4],[3,3]] [OK]
      Hint: Check sums at left and right, move pointers accordingly [OK]
      Common Mistakes:
      • Ignoring the case when left equals right
      • Not updating pointers correctly after finding a pair
      • Assuming only pairs with different indices count
      4. Find the bug in the following code that uses two pointers to check if an array is sorted in non-decreasing order.
      function isSorted(arr) {
        let left = 0;
        let right = arr.length - 1;
        while (left < right) {
          if (arr[left] > arr[left + 1]) {
            return false;
          }
          left++;
        }
        return true;
      }
      medium
      A. The loop condition should be left <= right
      B. The right pointer is unused and unnecessary
      C. The comparison should be between arr[left] and arr[right]
      D. The function does not handle empty arrays

      Solution

      1. Step 1: Analyze pointer usage

        The variable right is set but never used inside the loop or condition, making it unnecessary.
      2. Step 2: Check loop and comparison logic

        The loop correctly checks adjacent elements using left pointer only, so right can be removed without affecting logic.
      3. Final Answer:

        The right pointer is unused and unnecessary -> Option B
      4. Quick Check:

        Unused variable right pointer = bug [OK]
      Hint: Check if all declared variables are used [OK]
      Common Mistakes:
      • Thinking right pointer must be used in two pointer technique always
      • Changing loop condition unnecessarily
      • Confusing adjacent element checks with two pointer sum checks
      5. Given a sorted array arr and a target sum target, which code snippet correctly uses the two pointer technique to find if there exists a pair that sums to target?
      const arr = [1, 3, 4, 5, 7, 10, 12];
      const target = 9;
      // Which snippet is correct?
      hard
      A. let left = 0, right = arr.length - 1; while (left < right) { const sum = arr[left] + arr[right]; if (sum === target) return true; else if (sum < target) left++; else right--; } return false;
      B. let left = 0, right = arr.length - 1; while (left <= right) { const sum = arr[left] + arr[right]; if (sum === target) return true; else if (sum > target) left++; else right--; } return false;
      C. for (let left = 0, right = arr.length - 1; left < right; left++, right--) { if (arr[left] + arr[right] === target) return true; } return false;
      D. let left = 0, right = 0; while (left < arr.length && right < arr.length) { if (arr[left] + arr[right] === target) return true; else if (arr[left] + arr[right] < target) right++; else left++; } return false;

      Solution

      1. Step 1: Understand two pointer approach for pair sum

        Start with pointers at array ends: left=0, right=length-1. Move pointers based on sum compared to target.
      2. Step 2: Check each option logic

        let left = 0, right = arr.length - 1; while (left < right) { const sum = arr[left] + arr[right]; if (sum === target) return true; else if (sum < target) left++; else right--; } return false; correctly moves left pointer forward if sum < target, right pointer backward if sum > target, and returns true if sum equals target.
        let left = 0, right = arr.length - 1; while (left <= right) { const sum = arr[left] + arr[right]; if (sum === target) return true; else if (sum > target) left++; else right--; } return false; incorrectly moves left pointer forward when sum > target.
        for (let left = 0, right = arr.length - 1; left < right; left++, right--) { if (arr[left] + arr[right] === target) return true; } return false; moves both pointers every iteration, missing some pairs.
        let left = 0, right = 0; while (left < arr.length && right < arr.length) { if (arr[left] + arr[right] === target) return true; else if (arr[left] + arr[right] < target) right++; else left++; } return false; starts both pointers at 0, which is incorrect for this problem.
      3. Final Answer:

        Option A code snippet -> Option A
      4. Quick Check:

        Correct pointer moves based on sum vs target [OK]
      Hint: Move left if sum less, right if sum more [OK]
      Common Mistakes:
      • Moving wrong pointer when sum is greater or smaller
      • Using for loop that moves both pointers simultaneously
      • Starting both pointers at same index
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard