DEV Community

Oybek Rejametov
Oybek Rejametov

Posted on

🧠 "Two Pointers" ni tushunish: oddiy, ammo kuchli pattern - o'zbek tilida

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:

  1. Biri boshidan, ikkinchisi oxiridan boshlanadi — va ular bir-biriga qarab harakat qiladi.
  2. 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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode
  • Yangi array yaratadi
  • In-place ishlamaydi
  • Qo‘shimcha O(n) xotira talab qiladi
  • Vaqt: O(n^2) (sababi: har safar in 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   
Enter fullscreen mode Exit fullscreen mode
  • 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 (oddiy O(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)