Agar siz algoritmlarni o‘rganayotgan yoki interviewlarga tayyorlanayotgan bo‘lsangiz, albatta two pointers (ikki ko‘rsatkich) degan atamaga duch kelgansiz/kelasiz. Bu qiyin ko‘ringaniga qaramay, aslida eng oddiy va foydali patternlardan biri bo‘lib, array va string masalalarini samarali yechishda juda ko‘p ishlatiladi.
Ushbu postda sizga two pointers nima ekanini, qanday ishlashini bir nechta oddiy misollar orqali tushuntiraman.
📌 Two Pointers nima?
G‘oya juda oddiy: ikki o‘zgaruvchi (ko‘rsatkich) yordamida array yoki string bo‘ylab yuramiz.
Asosan 2 xil usul bor:
- Biri boshidan, ikkinchisi oxiridan boshlanadi — va ular bir-biriga qarab harakat qiladi.
- Ikkalasi ham bir yo‘nalishda harakat qiladi (masalan, sliding window yoki fast & slow pointerlar kabi).
🤓 Misol 1: Palindromni tekshirish (Valid Palindrome)
Kiritish1: "racecar"
Tushuntirish:
Chapdan o‘ngga: "racecar"
O‘ngdan chapga: "racecar"
✅ Ular bir xil → palindrom
Natija: True
Kiritish2: "hello"
Tushuntirish:
Chapdan o‘ngga: "hello"
O‘ngdan chapga: "olleh"
❌ Ular bir xil emas
Natija: False
❌ Oddiy (lekin sekin) yondashuv:
for i from 0 to length(s) - 1:
reversed = ""
for j from length(s) - 1 down to 0:
reversed = reversed + s[j]
if s != reversed:
return false
return true
- Vaqt murakkabligi:
O(n^2)
, xotira:O(n)
✅ Two Pointers (tejamli)
left = 0
right = length(s) - 1
while left < right:
if s[left] != s[right]:
return false
left = left + 1
right = right - 1
return true
- Qo‘shimcha xotira ishlatilmaydi
- Vaqt:
O(n)
, xotira:O(1)
Bu yerda ikki pointer stringning qarama-qarshi uchlaridan harakat qilib, belgilarni solishtiradi.
🤓 Misol 2: Takroriy elementlarni olib tashlash (Remove Duplicates from Sorted Array)
Vazifa:
Berilgan saralangan arraydan takroriy elementlarni in-place(berilgan arrayni o'zi bilan ishlash) olib tashlash va faqat noyob(unikal) elementlar bilan qolgan uzunlikni qaytarish.
Kiritish: [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
Natija: [0, 1, 2, 3, 4]
❌ Oddiy (yomon) yechim:
new_array = []
for i from 0 to length(arr) - 1:
if arr[i] not in new_array:
append arr[i] to new_array
return new_array
- Yangi array yaratadi
- In-place ishlamaydi
- Qo‘shimcha
O(n)
xotira talab qiladi - Vaqt:
O(n^2)
(sababi: har safarin
ishlatiladi)
✅ Two Pointers (samarali)
left = 0
right = 1
while right < len(nums):
if nums[right] != nums[left]:
left += 1
nums[left] = nums[right]
right += 1
return left + 1
-
right
arrayni skan qiladi -
left
noyob qiymatlar joylashadigan pozitsiyani ko‘rsatadi - Array o‘zida yangilanadi
- Vaqt:
O(n)
, xotira:O(1)
✅ Qachon ishlatish kerak?
Two pointers quyidagi holatlarda ayniqsa foydali:
- Array saralangan bo‘lsa
- Sizga juftliklar, subarraylar yoki oraliqlar kerak bo‘lsa
- Sizga
O(n)
samaradorlikdagi algoritm kerak bo‘lsa (oddiyO(n²)
o‘rniga)
🎯 Mashq uchun masalalar
Quyidagilarni yechib ko‘ring:
✍️ Yakuniy so‘z
Two pointers — intervyularda juda ko‘p uchraydigan, boshlovchilar uchun mos va samarali yondashuv.
U sizga soddaroq va tezroq kod yozishda yordam beradi.
Agar post foydali bo‘lgan bo‘lsa — albatta reaksiya qoldiring!
Top comments (0)