الگوی دو اشاره‌گر (Two Pointers)

الگوی دو اشاره‌گر: جفت‌یابی در آرایه مرتب، معکوس‌سازی درجا، حذف تکراری‌ها و سه‌تایی با جمع صفر

ایده الگو

دو اشاره‌گر (Two Pointers) دو اندیس (معمولاً از دو سر) روی داده حرکت می‌دهند و جستجوی O(n²) را به O(n) تبدیل می‌کنند. شرط طلایی: داده مرتب باشد (یا مرتب‌کردن منطقی باشد).

چرا جواب می‌دهد؟

در آرایه مرتب با اشاره‌گر چپ و راست:

هر گام، دست‌کم یک عنصر را «قطعاً جواب نیست» حذف می‌کند — پس حداکثر n گام!

سه شکل رایج

شکلکاربردمثال
از دو سر به همآرایه مرتب + جفتTwo Sum II
کند و تند (مبحث جدا)لیست پیوندی، حلقهوسط لیست
هم‌مبدأ (i و j)مقایسه/ادغامحذف تکراری، merge

مسائل کلاسیک

الگوی کد

left, right = 0, len(arr) - 1
while left < right:
    if شرط_برقرار(arr[left], arr[right]):
        # جواب پیدا شد یا ثبت کن
        ...
    elif نیاز_بزرگتر:
        left += 1
    else:
        right -= 1
نکته مصاحبه: اگر آرایه مرتب نیست و ایندکس اصلی لازم است، یا اول مرتب کنید و ایندکس‌ها را نگه دارید، یا از هش استفاده کنید — این نکته را حتماً بگویید!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل الگوریتم‌ها است.

ابزارهای مرتبط