← All patterns
Two Pointers

Two Pointers — Opposite Ends

217 practice questions|Easy

When to use it

Start at the extremes of a sorted array and move inward based on target comparison.

Key Signals & Indicators

  • Sorted input array, string, or matrix
  • Searching for pairs that satisfy a condition (sum, products)
  • Requires constant auxiliary space O(1)

Pattern Boilerplate

c++
// C++ Two Pointers Opposite Ends Template
#include <vector>

std::pair<int, int> oppositePointers(const std::vector<int>& arr, int target) {
    int left = 0;
    int right = arr.size() - 1;
    
    while (left < right) {
        int sum = arr[left] + arr[right];
        if (sum == target) {
            return {left, right};
        } else if (sum < target) {
            left++; // Move left pointer inward
        } else {
            right--; // Move right pointer inward
        }
    }
    return {-1, -1};
}

Problems using this pattern

13Sum ClosestMedium
ArrayTwo PointersSorting
Solve →
23Sum SmallerMedium
ArrayTwo PointersBinary Search
Solve →
33Sum With MultiplicityMedium
ArrayHash TableTwo Pointers
Solve →
43SumMedium
ArrayTwo PointersSorting
Solve →
54SumMedium
ArrayTwo PointersSorting
Solve →
6Add Two Polynomials Represented as Linked ListsMedium
Linked ListMathTwo Pointers
Solve →
7Adding Spaces to a StringMedium
ArrayTwo PointersString
Solve →
8Advantage ShuffleMedium
ArrayTwo PointersGreedy
Solve →
9Append Characters to String to Make SubsequenceMedium
Two PointersStringGreedy
Solve →
10Apply Operations to an ArrayEasy
ArrayTwo PointersSimulation
Solve →
11Assign CookiesEasy
ArrayTwo PointersGreedy
Solve →
12Backspace String CompareEasy
Two PointersStringStack
Solve →
13Bag of TokensMedium
ArrayTwo PointersGreedy
Solve →
14Boats to Save PeopleMedium
ArrayTwo PointersGreedy
Solve →
15Camelcase MatchingMedium
ArrayTwo PointersString
Solve →
16Candy CrushMedium
ArrayTwo PointersMatrix
Solve →
17Check If a Word Occurs As a Prefix of Any Word in a SentenceEasy
Two PointersStringString Matching
Solve →
18Check If N and Its Double ExistEasy
ArrayHash TableTwo Pointers
Solve →
19Check If String Is a Prefix of ArrayEasy
ArrayTwo PointersString
Solve →
20Checking Existence of Edge Length Limited PathsHard
ArrayTwo PointersUnion-Find
Solve →
21Circular Array LoopMedium
ArrayHash TableTwo Pointers
Solve →
22Closest Binary Search Tree Value IIHard
Two PointersStackTree
Solve →
23Closest Subsequence SumHard
ArrayTwo PointersDynamic Programming
Solve →
24Compare Version NumbersMedium
Two PointersString
Solve →
25Container With Most WaterMedium
ArrayTwo PointersGreedy
Solve →
26Count Binary SubstringsEasy
Two PointersString
Solve →
27Count Pairs in Two ArraysMedium
ArrayTwo PointersBinary Search
Solve →
28Count Pairs Of NodesHard
ArrayHash TableTwo Pointers
Solve →
29Count Pairs Whose Sum is Less than TargetEasy
ArrayTwo PointersBinary Search
Solve →
30Count the Number of Fair PairsMedium
ArrayTwo PointersBinary Search
Solve →
31Count the Number of Incremovable Subarrays IEasy
ArrayTwo PointersBinary Search
Solve →
32Count the Number of Incremovable Subarrays IIHard
ArrayTwo PointersBinary Search
Solve →
33Create Maximum NumberHard
ArrayTwo PointersStack
Solve →
34Delete the Middle Node of a Linked ListMedium
Linked ListTwo Pointers
Solve →
35DI String MatchEasy
ArrayTwo PointersString
Solve →
36Divide Intervals Into Minimum Number of GroupsMedium
ArrayTwo PointersGreedy
Solve →
37Divide Players Into Teams of Equal SkillMedium
ArrayHash TableTwo Pointers
Solve →
38Dot Product of Two Sparse VectorsMedium
ArrayHash TableTwo Pointers
Solve →
39Duplicate ZerosEasy
ArrayTwo Pointers
Solve →
40Expressive WordsMedium
ArrayTwo PointersString
Solve →
41Faulty SensorEasy
ArrayTwo Pointers
Solve →
42Find All K-Distant Indices in an ArrayEasy
ArrayTwo Pointers
Solve →
43Find Beautiful Indices in the Given Array IMedium
Two PointersStringBinary Search
Solve →
44Find Beautiful Indices in the Given Array IIHard
Two PointersStringBinary Search
Solve →
45Find First Palindromic String in the ArrayEasy
ArrayTwo PointersString
Solve →
46Find Indices With Index and Value Difference IEasy
ArrayTwo Pointers
Solve →
47Find Indices With Index and Value Difference IIMedium
ArrayTwo Pointers
Solve →
48Find K Closest ElementsMedium
ArrayTwo PointersBinary Search
Solve →
49Find K-th Smallest Pair DistanceHard
ArrayTwo PointersBinary Search
Solve →
50Find Maximum Removals From Source StringMedium
ArrayHash TableTwo Pointers
Solve →
51Find Median from Data StreamHard
Two PointersDesignSorting
Solve →
52Find Positive Integer Solution for a Given EquationMedium
MathTwo PointersBinary Search
Solve →
53Find the Array Concatenation ValueEasy
ArrayTwo PointersSimulation
Solve →
54Find the CelebrityMedium
Two PointersGraph TheoryInteractive
Solve →
55Find the Distance Value Between Two ArraysEasy
ArrayTwo PointersBinary Search
Solve →
56Find the Duplicate NumberMedium
ArrayTwo PointersBinary Search
Solve →
57Find the Index of the First Occurrence in a StringEasy
Two PointersStringString Matching
Solve →
58Find the Integer Added to Array IIMedium
ArrayTwo PointersSorting
Solve →
59Find the Lexicographically Largest String From the Box IMedium
Two PointersStringEnumeration
Solve →
60Find the Lexicographically Smallest Valid SequenceMedium
Two PointersStringDynamic Programming
Solve →
61Flatten 2D VectorMedium
ArrayTwo PointersDesign
Solve →
62Flipping an ImageEasy
ArrayTwo PointersBit Manipulation
Solve →
63Form Array by Concatenating Subarrays of Another ArrayMedium
ArrayTwo PointersGreedy
Solve →
64Friends Of Appropriate AgesMedium
ArrayTwo PointersBinary Search
Solve →
65Get the Maximum ScoreHard
ArrayTwo PointersDynamic Programming
Solve →
66Happy NumberEasy
Hash TableMathTwo Pointers
Solve →
67HeatersMedium
ArrayTwo PointersBinary Search
Solve →
68Intersection of Two Arrays IIEasy
ArrayHash TableTwo Pointers
Solve →
69Intersection of Two ArraysEasy
ArrayHash TableTwo Pointers
Solve →
70Intersection of Two Linked ListsEasy
Hash TableLinked ListTwo Pointers
Solve →
71Interval List IntersectionsMedium
ArrayTwo PointersSweep Line
Solve →
72Is SubsequenceEasy
Two PointersStringDynamic Programming
Solve →
73K-diff Pairs in an ArrayMedium
ArrayHash TableTwo Pointers
Solve →
74K-th Smallest Prime FractionMedium
ArrayTwo PointersBinary Search
Solve →
75Largest Merge Of Two StringsMedium
Two PointersStringGreedy
Solve →
76Largest Positive Integer That Exists With Its NegativeEasy
ArrayHash TableTwo Pointers
Solve →
77Last Substring in Lexicographical OrderHard
Two PointersString
Solve →
78Lexicographically Smallest Negated Permutation that Sums to TargetMedium
ArrayMathTwo Pointers
Solve →
79Lexicographically Smallest PalindromeEasy
Two PointersStringGreedy
Solve →
80Linked List Cycle IIMedium
Hash TableLinked ListTwo Pointers
Solve →
81Linked List CycleEasy
Hash TableLinked ListTwo Pointers
Solve →
82Long Pressed NameEasy
Two PointersString
Solve →
83Longest Chunked Palindrome DecompositionHard
Two PointersStringDynamic Programming
Solve →
84Longest Mountain in ArrayMedium
ArrayTwo PointersDynamic Programming
Solve →
85Longest Palindrome After Substring Concatenation IMedium
Two PointersStringDynamic Programming
Solve →
86Longest Palindrome After Substring Concatenation IIHard
Two PointersStringDynamic Programming
Solve →
87Longest Palindromic SubstringMedium
Two PointersStringDynamic Programming
Solve →
88Longest String ChainMedium
ArrayHash TableTwo Pointers
Solve →
89Longest Subsequence Repeated k TimesHard
Hash TableTwo PointersString
Solve →
90Longest Uncommon Subsequence IIMedium
ArrayHash TableTwo Pointers
Solve →
91Longest Word in Dictionary through DeletingMedium
ArrayTwo PointersString
Solve →
92Lowest Common Ancestor of a Binary Tree IIIMedium
Hash TableTwo PointersTree
Solve →
93Magical StringMedium
Two PointersString
Solve →
94Make String a Subsequence Using Cyclic IncrementsMedium
Two PointersString
Solve →
95Max Number of K-Sum PairsMedium
ArrayHash TableTwo Pointers
Solve →
96Maximize Greatness of an ArrayMedium
ArrayTwo PointersGreedy
Solve →
97Maximum Calories Burnt from JumpsMedium
ArrayTwo PointersGreedy
Solve →
98Maximum Capacity Within BudgetMedium
ArrayTwo PointersBinary Search
Solve →
99Maximum Coins Heroes Can CollectMedium
ArrayTwo PointersBinary Search
Solve →
100Maximum Distance Between a Pair of ValuesMedium
ArrayTwo PointersBinary Search
Solve →
101Maximum Matching of Players With TrainersMedium
ArrayTwo PointersGreedy
Solve →
102Maximum Number of Non-overlapping Palindrome SubstringsHard
Two PointersStringDynamic Programming
Solve →
103Maximum Number of Points From Grid QueriesHard
ArrayTwo PointersBreadth-First Search
Solve →
104Maximum Number of Removable CharactersMedium
ArrayTwo PointersString
Solve →
105Maximum Number of Tasks You Can AssignHard
ArrayTwo PointersBinary Search
Solve →
106Maximum Product of First and Last Elements of a SubsequenceMedium
ArrayTwo Pointers
Solve →
107Maximum Score of a Good SubarrayHard
ArrayTwo PointersBinary Search
Solve →
108Maximum Total Beauty of the GardensHard
ArrayTwo PointersBinary Search
Solve →
109Maximum Total Damage With Spell CastingMedium
ArrayHash TableTwo Pointers
Solve →
110Maximum Total from Optimal Activation OrderMedium
ArrayTwo PointersGreedy
Solve →
111Maximum Twin Sum of a Linked ListMedium
Linked ListTwo PointersStack
Solve →
112Maximum Width RampMedium
ArrayTwo PointersStack
Solve →
113Meeting Rooms IIMedium
ArrayTwo PointersGreedy
Solve →
114Meeting SchedulerMedium
ArrayTwo PointersSorting
Solve →
115Merge Operations to Turn Array Into a PalindromeMedium
ArrayTwo PointersGreedy
Solve →
116Merge Sorted ArrayEasy
ArrayTwo PointersSorting
Solve →
117Merge Strings AlternatelyEasy
Two PointersString
Solve →
118Merge Two 2D Arrays by Summing ValuesEasy
ArrayHash TableTwo Pointers
Solve →
119Middle of the Linked ListEasy
Linked ListTwo Pointers
Solve →
120Minimize Maximum Pair Sum in ArrayMedium
ArrayTwo PointersGreedy
Solve →
121Minimum Adjacent Swaps to Reach the Kth Smallest NumberMedium
Two PointersStringGreedy
Solve →
122Minimum Array Length After Pair RemovalsMedium
ArrayHash TableTwo Pointers
Solve →
123Minimum Average of Smallest and Largest ElementsEasy
ArrayTwo PointersSorting
Solve →
124Minimum Common ValueEasy
ArrayHash TableTwo Pointers
Solve →
125Minimum Length of String After Deleting Similar EndsMedium
Two PointersString
Solve →
126Minimum Number of Flips to Make Binary Grid Palindromic IIMedium
ArrayTwo PointersMatrix
Solve →
127Minimum Number of Moves to Make PalindromeHard
Two PointersStringGreedy
Solve →
128Minimum Number of Swaps to Make the String BalancedMedium
Two PointersStringStack
Solve →
129Minimum Operations to Make Binary PalindromeMedium
ArrayTwo PointersBinary Search
Solve →
130Minimum Time to Eat All GrainsHard
ArrayTwo PointersBinary Search
Solve →
131Most Profit Assigning WorkMedium
ArrayTwo PointersBinary Search
Solve →
132Move Pieces to Obtain a StringMedium
Two PointersString
Solve →
133Move ZeroesEasy
ArrayTwo Pointers
Solve →
134Next Greater Element IIIMedium
MathTwo PointersString
Solve →
135Next Palindrome Using Same DigitsHard
Two PointersString
Solve →
136Next PermutationMedium
ArrayTwo Pointers
Solve →
137Number of Arithmetic TripletsEasy
ArrayHash TableTwo Pointers
Solve →
138Number of Distinct AveragesEasy
ArrayHash TableTwo Pointers
Solve →
139Number of Perfect PairsMedium
ArrayMathTwo Pointers
Solve →
140Number of Smooth Descent Periods of a StockMedium
ArrayMathTwo Pointers
Solve →
141Number of Subarrays with Bounded MaximumMedium
ArrayTwo Pointers
Solve →
142Number of Subsequences That Satisfy the Given Sum ConditionMedium
ArrayTwo PointersBinary Search
Solve →
143One Edit DistanceMedium
Two PointersString
Solve →
144Palindrome Linked ListEasy
Linked ListTwo PointersStack
Solve →
145Palindromic SubstringsMedium
Two PointersStringDynamic Programming
Solve →
146Pancake SortingMedium
ArrayTwo PointersGreedy
Solve →
147Partition Array According to Given PivotMedium
ArrayTwo PointersSimulation
Solve →
148Partition Array Into Two Arrays to Minimize Sum DifferenceHard
ArrayTwo PointersBinary Search
Solve →
149Partition LabelsMedium
Hash TableTwo PointersString
Solve →
150Partition ListMedium
Linked ListTwo Pointers
Solve →
151Path Existence Queries in a Graph IIHard
ArrayTwo PointersBinary Search
Solve →
152Permutation in StringMedium
Hash TableTwo PointersString
Solve →
153Product of Two Run-Length Encoded ArraysMedium
ArrayTwo Pointers
Solve →
154Push DominoesMedium
Two PointersStringDynamic Programming
Solve →
155Range Sum of Sorted Subarray SumsMedium
ArrayTwo PointersBinary Search
Solve →
156Rearrange Array Elements by SignMedium
ArrayTwo PointersSimulation
Solve →
157Recover the Original ArrayHard
ArrayHash TableTwo Pointers
Solve →
158Remove Duplicates from Sorted Array IIMedium
ArrayTwo Pointers
Solve →
159Remove Duplicates from Sorted ArrayEasy
ArrayTwo Pointers
Solve →
160Remove Duplicates from Sorted List IIMedium
Linked ListTwo Pointers
Solve →
161Remove ElementEasy
ArrayTwo Pointers
Solve →
162Remove Nth Node From End of ListMedium
Linked ListTwo Pointers
Solve →
163Remove Palindromic SubsequencesEasy
Two PointersString
Solve →
164Reorder ListMedium
Linked ListTwo PointersStack
Solve →
165Reverse Only LettersEasy
Two PointersString
Solve →
166Reverse Prefix of WordEasy
Two PointersStringStack
Solve →
167Reverse String IIEasy
Two PointersString
Solve →
168Reverse String PrefixEasy
Two PointersString
Solve →
169Reverse StringEasy
Two PointersString
Solve →
170Reverse Vowels of a StringEasy
Two PointersString
Solve →
171Reverse Words in a String IIMedium
Two PointersString
Solve →
172Reverse Words in a String IIIEasy
Two PointersString
Solve →
173Reverse Words in a StringMedium
Two PointersString
Solve →
174Rotate ArrayMedium
ArrayMathTwo Pointers
Solve →
175Rotate ListMedium
Linked ListTwo Pointers
Solve →
176Rotating the BoxMedium
ArrayTwo PointersMatrix
Solve →
177Sentence Similarity IIIMedium
ArrayTwo PointersString
Solve →
178Separate Black and White BallsMedium
Two PointersStringGreedy
Solve →
179Shortest Distance to a CharacterEasy
ArrayTwo PointersString
Solve →
180Shortest Matching SubstringHard
Two PointersStringBinary Search
Solve →
181Shortest Subarray to be Removed to Make Array SortedMedium
ArrayTwo PointersBinary Search
Solve →
182Shortest Unsorted Continuous SubarrayMedium
ArrayTwo PointersStack
Solve →
183Shortest Way to Form StringMedium
Two PointersStringBinary Search
Solve →
184Shortest Word Distance IIMedium
ArrayHash TableTwo Pointers
Solve →
185Sort Array By Absolute ValueEasy
ArrayMathTwo Pointers
Solve →
186Sort Array By Parity IIEasy
ArrayTwo PointersSorting
Solve →
187Sort Array By ParityEasy
ArrayTwo PointersSorting
Solve →
188Sort ColorsMedium
ArrayTwo PointersSorting
Solve →
189Sort ListMedium
Linked ListTwo PointersDivide and Conquer
Solve →
190Sort Transformed ArrayMedium
ArrayMathTwo Pointers
Solve →
191Split Two Strings to Make PalindromeMedium
Two PointersString
Solve →
192Squares of a Sorted ArrayEasy
ArrayTwo PointersSorting
Solve →
193Strictly Palindromic NumberMedium
MathTwo PointersBrainteaser
Solve →
194String CompressionMedium
Two PointersString
Solve →
195Strobogrammatic NumberEasy
Hash TableTwo PointersString
Solve →
196Subsequence Sum After Capping ElementsMedium
ArrayTwo PointersDynamic Programming
Solve →
197Subsequence With the Minimum ScoreHard
Two PointersStringBinary Search
Solve →
198Successful Pairs of Spells and PotionsMedium
ArrayTwo PointersBinary Search
Solve →
199Sum of Square NumbersMedium
MathTwo PointersBinary Search
Solve →
200Swap Adjacent in LR StringMedium
Two PointersString
Solve →
201Swapping Nodes in a Linked ListMedium
Linked ListTwo Pointers
Solve →
202The k Strongest Values in an ArrayMedium
ArrayTwo PointersSorting
Solve →
203The Latest Time to Catch a BusMedium
ArrayTwo PointersBinary Search
Solve →
204Total Cost to Hire K WorkersMedium
ArrayTwo PointersHeap (Priority Queue)
Solve →
205Trapping Rain WaterHard
ArrayTwo PointersDynamic Programming
Solve →
206Two Sum BSTsMedium
Two PointersBinary SearchStack
Solve →
207Two Sum II - Input Array Is SortedMedium
ArrayTwo PointersBinary Search
Solve →
208Two Sum III - Data structure designEasy
ArrayHash TableTwo Pointers
Solve →
209Two Sum IV - Input is a BSTEasy
Hash TableTwo PointersTree
Solve →
210Two Sum Less Than KEasy
ArrayTwo PointersBinary Search
Solve →
211Valid Palindrome IIEasy
Two PointersStringGreedy
Solve →
212Valid Palindrome IVMedium
Two PointersString
Solve →
213Valid PalindromeEasy
Two PointersString
Solve →
214Valid Triangle NumberMedium
ArrayTwo PointersBinary Search
Solve →
215Valid Word AbbreviationEasy
Two PointersString
Solve →
216Watering Plants IIMedium
ArrayTwo PointersSimulation
Solve →
217Ways to Split Array Into Three SubarraysMedium
ArrayTwo PointersBinary Search
Solve →