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.
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.
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]
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
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
- Pointers ko correctly move nahi karna: Agar sum chhota hai toh left badhana hai, agar bada hai toh right ghatana hai. Ulta karoge toh infinite loop mein fas jaoge.
- Infinite loop:
while left < rightki jagahwhile left <= rightkabhi mat likho jab sum check kar rahe ho � same element twice count ho jayega. - Sorted array bhool jaana: Two pointer technique sorted arrays pe kaam karti hai. Agar array sorted nahi hai toh pehle sort karo ya brute force use karo.
- Edge cases skip karna: Empty array, single element, ya sab elements same � ye sab test karo. Interview mein ye galat hota hai.
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.