BackeasyTwo PointersInfosys

Parity-Based Pointer Convergence Solution

Problem Statement

Given an array of integers nums, return the index where the two pointers meet for the first time. If the pointers meet at the same index, return that index.

Example 1
Input
[1, 2, 3, 4, 5]
Output
2

Explanation: Step-by-step: with input [1, 2, 3, 4, 5], we initialize two pointers, one at the start and one at the end of the array. We then move the pointers towards each other until they meet. In this case, the pointers meet at index 2.

Example 2
Input
[1, 2, 3, 4, 5, 6]
Output
3

Explanation: Step-by-step: with input [1, 2, 3, 4, 5, 6], we initialize two pointers, one at the start and one at the end of the array. We then move the pointers towards each other until they meet. In this case, the pointers meet at index 3.

Constraints

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Parity-Based Pointer Convergence — Problem Statement & Solution Guide

Two PointersEasyOpposite Pointers
TimeO(n)
|
SpaceO(1)

Problem Description

Given an array of integers nums, return the index where the two pointers meet for the first time. If the pointers meet at the same index, return that index.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Parity-Based Pointer Convergence"

easy

WHY DOES IT MATTER?

The two-pointer pattern reduces time complexity from quadratic to linear by eliminating redundant comparisons. It is especially powerful when the problem involves symmetric or reverse traversal, such as finding a meeting point, checking palindromes, or merging sorted lists. By moving two indices together, we avoid nested loops and achieve O(n) performance, which is critical for large datasets.

OPTIMIZATION CHALLENGE

The key insight is that the distance between the two pointers shrinks by two with each simultaneous move. Recognizing this allows us to compute the meeting index directly as floor((n-1)/2) or to stop the loop when left>=right, eliminating the need for extra loops or data structures.

REAL-WORLD CONNECTION

Consider a pair of robots starting at opposite ends of a warehouse aisle, each moving toward the center to perform a synchronized task. They must stop at the same spot to hand off a package. The two-pointer technique models this scenario, ensuring both robots reach the meeting point efficiently without unnecessary backtracking.

When explaining this pattern in an interview, emphasize the invariant that the sum of the indices (left+right) decreases by two each iteration. This invariant guarantees convergence and helps the interviewer see why the algorithm is correct and efficient.

COMPLEXITY AT A GLANCE

⏱ Time:O(n)
💾 Space:O(1)

Core Theory — Why This Approach?

The two-pointer paradigm is a classic linear-time, constant-space technique that processes an array from both ends simultaneously. In this problem, one pointer starts at index 0 (the leftmost element) and the other starts at index n-1 (the rightmost element). By incrementing the left pointer and decrementing the right pointer in lockstep, the algorithm guarantees that the pointers will converge to the middle of the array in exactly ⌊(n-1)/2⌋ steps. Naive approaches that examine every possible pair of indices or simulate each step independently would incur O(n^2) time, making them impractical for large inputs. The optimal paradigm leverages the fact that the relative distance between the two pointers decreases by two with each iteration, allowing us to determine the meeting index in a single pass without any auxiliary data structures.

Interview Questions on This Problem

Q1How would you modify the two-pointer technique if the array were sorted and you needed to find two numbers that sum to a target value?

You would initialize one pointer at the start and one at the end. If the sum of the values at the pointers is less than the target, increment the left pointer; if it is greater, decrement the right pointer. This runs in O(n) time and O(1) space because the sorted order guarantees that moving a pointer in the appropriate direction will bring you closer to the target sum.

Q2In a distributed system, how can the two-pointer pattern be applied to detect duplicate records across two sorted data streams?

Treat each stream as a sorted list and maintain a pointer into each. Compare the current records; if they match, record the duplicate and advance both pointers. If one record is smaller, advance the pointer of that stream. This streaming merge approach processes each record once, achieving O(n) time and O(1) additional space, which is essential for large-scale data pipelines.

Q3What are the pitfalls when implementing the two-pointer meeting index for arrays of even length, and how would you address them in an interview?

For even-length arrays, the pointers cross without ever being equal, so you must decide whether to return the left pointer (which will be one greater than the right) or the right pointer. Clarify the requirement: if the problem asks for the index where they first cross, return left (or right+1). Explicitly state your assumption and handle the even case by returning left after the loop.

Examples

Example 1

Input

[1, 2, 3, 4, 5]

Output

2

Explanation: Step-by-step: with input [1, 2, 3, 4, 5], we initialize two pointers, one at the start and one at the end of the array. We then move the pointers towards each other until they meet. In this case, the pointers meet at index 2.

Example 2

Input

[1, 2, 3, 4, 5, 6]

Output

3

Explanation: Step-by-step: with input [1, 2, 3, 4, 5, 6], we initialize two pointers, one at the start and one at the end of the array. We then move the pointers towards each other until they meet. In this case, the pointers meet at index 3.

Constraints

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

Optimal Approach & Strategy

The optimal approach uses two pointers moving simultaneously from the ends, halving the distance each step. This yields O(n) time and O(1) space by avoiding any extra data structures.

Brute Force Approach

A naive solution would check every pair of indices to see when left and right would meet, leading to O(n^2) time. It would also require nested loops or repeated scans, which is inefficient for large arrays.

Verified Code Solutions

JavaScript Solution
Time: O(n)
function findMeetingIndex(nums) {
    let left = 0;
    let right = nums.length - 1;
    while (left < right) {
        left++;
        right--;
    }
    return left;
}

Asked in Top Tech Interviews

Infosys

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.