Hello everyone!
Today I want to explain one of the most useful techniques in competitive programming — Two Pointers * What is Two Pointers?
Two pointers is a technique where we use two indices to iterate over an array or string.
Usually:
- One pointer starts from the beginning
- Another from the end (or also from beginning)
Example Problem
Given an array, find if there exist two numbers whose sum equals k.
- Idea
Sort the array
Set:
left = 0 right = n — 1
While left < right:
if a[left] + a[right] == k → FOUND if sum < k → left++ if sum > k → right--
- Code (C++)
cpp
include <bits/stdc++.h>
using namespace std;
int main() { int n, k; cin >> n >> k; vector a(n); for(int i = 0; i < n; i++) cin >> a[i]; sort(a.begin(), a.end()); int l = 0, r = n — 1; while(l < r) { int sum = a[l] + a[r]; if(sum == k) { cout << "YES\n"; return 0; } else if(sum < k) l++; else r--; } cout << "NO\n"; } * Complexity
Sorting: O(n log n) Two pointers: O(n)
Total: O(n log n)
- When to Use?
1) Sorted arrays 2)Pair problems 3)Subarray problems
*Final Tip
If you see:
1) “find pair” 2) “sum equals k” 3) “continuous segment” Think about Two Pointers
Thanks for reading! If this helped you, please upvote



