Lesson 2 � Beginner-Intermediate

Two Pointer Technique

Two pointer technique arrays mein sabse zyada use hone wala pattern hai. Do pointers ek array pe kaam karte hain aur O(n�) ko O(n) mein convert karte hain. Interview mein ye technique 80% array questions mein kaam aati hai.

? 25 min✓ Beginner-Intermediate✓ Arrays basics

Two Pointer kya hai?

WHAT

Two pointer technique mein hum do variables (pointers) ek array pe rakhte hain aur unhe different directions mein move karte hain. Ek pointer shuru se chalta hai (left), doosra end se (right). Ya dono same direction mein but different speed se.

WHEN

Jab array sorted ho aur tumhe pair find karna ho, jab palindrome check karna ho, jab array mein two elements ka sum target ke barabar ho, ya jab cycle detection karni ho � tab two pointers use karo.

WHERE

Two Sum (sorted), Valid Palindrome, Container With Most Water, Remove Duplicates, Linked List Cycle � ye sab classic two pointer problems hain.

Mental Model: Imagine karo tum ek garden walk kar rahe ho. Do log ek doosre se opposite ends se chal rahe hain � jab tak wo mil nahi jaate, tab tak walk karte rahte hain. Two pointers bhi aise hi kaam karte hain � dono taraf se array explore karte hain.

Two Pointer ke 2 Patterns

Two pointer technique basically do types ki hoti hai. Dono samajh lo, bahut saare questions solve ho jayenge:

# Pattern 1: Opposite Direction (Left-Right)
# Jab array sorted ho aur opposite ends se kaam karna ho

arr = [1, 2, 3, 4, 5, 6]
left = 0
right = len(arr) - 1

while left < right:
 current_sum = arr[left] + arr[right]
 if current_sum == 7:
 print(f"Found: {arr[left]} + {arr[right]} = 7")
 break
 elif current_sum < 7:
 left += 1 # Sum badhana hai
 else:
 right -= 1 # Sum kam karna hai
# Pattern 2: Same Direction (Slow-Fast)
# Jab cycle detect karna ho ya duplicate remove karna ho

arr = [1, 1, 2, 2, 3, 4, 4, 5]
slow = 0 # Slow pointer � unique elements ki jagah

for fast in range(1, len(arr)):
 if arr[fast] != arr[slow]:
 slow += 1
 arr[slow] = arr[fast]

# arr mein first (slow+1) elements unique hain
print(arr[:slow+1]) # [1, 2, 3, 4, 5]
Pattern Recognition: Agar question mein "sorted array" hai aur "pair" ya "sum" ka scene hai � toh Left-Right pattern try karo. Agar "cycle" ya "remove duplicates" hai � toh Slow-Fast pattern try karo.

Step-by-Step Example: Two Sum in Sorted Array

Maan lo tumhe sorted array mein do numbers find karne hain jinka sum target ke barabar ho. Brute force approach O(n�) hogi � har element ke saath sab elements check karna. Two pointer se O(n) ho jayega:

def two_sum_sorted(arr, target):
 left = 0
 right = len(arr) - 1
 
 while left < right:
 current_sum = arr[left] + arr[right]
 
 if current_sum == target:
 return [left, right] # Mil gaya!
 elif current_sum < target:
 left += 1 # Sum chhota hai, left badhao
 else:
 right -= 1 # Sum bada hai, right ghatao
 
 return [-1, -1] # Nahi mila

# Example
arr = [1, 2, 3, 4, 6, 8, 10]
print(two_sum_sorted(arr, 10)) # [1, 4] ✓ arr[1]+arr[4] = 2+8 = 10

Visualize karo � left pointer pe 1 hai, right pe 10. Sum = 11, target se zyada hai. Right ko move karo. Ab left=1 (value 2), right=6 (value 8). Sum = 10, mil gaya! Ye brute force se bahut fast hai.

Palindrome Check with Two Pointers

Ek string palindrome hai ya nahi � ye check karna two pointer se bahut easy hai. Dono taraf se compare karte jao:

def is_palindrome(s):
 left = 0
 right = len(s) - 1
 
 while left < right:
 if s[left] != s[right]:
 return False # Mismatch mila
 left += 1
 right -= 1
 
 return True # Sab match hai

print(is_palindrome("racecar")) # True
print(is_palindrome("hello")) # False
Real-world use: Ye pattern string validation, DNA sequence matching, aur even simple game theory mein use hota hai. Interviews mein frequently pucha jaata hai.

Two Pointer Variations

Container With Most Water

Two lines find karo jo sabse zyada paani contain kar sakein. Left-right pointer se O(n) mein solve hota hai � jo side chhoti hai uski taraf move karo.

Three Sum

Ek element fix karo aur baaki ke liye two pointer use karo. Pehle sort karo array, phir har element ke liye two sum find karo. O(n�) time.

Remove Duplicates

Sorted array mein duplicates hatao. Slow pointer unique position rakhta hai, fast pointer traverse karta hai. O(n) time, O(1) space.

Try it: code khud likho

Exercise

Question: Sorted array [2, 4, 6, 8, 10, 12] mein do numbers find karo jinka sum 14 ho. Function likho jo index return kare. Answer mein comma-separated indices daalo (jaise "1,4").

Question: Function likho jo check kare string "madam" palindrome hai ya nahi. Answer mein "True" ya "False" daalo.

Common mistakes

Lesson complete?

Two pointers samajh aa gaye✓ Ab Sliding Window pattern seekhte hain � ye two pointer ka advanced version hai jo subarray problems mein kaam aata hai.