نافذة متغيرة بمؤشرين
توسيع النافذة وتقليصها لتحقيق شرط
نافذة متغيرة بمؤشرين درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
عندما تتمدد النافذة وتنكمش
لا تثبّت بعض المسائل طول النافذة. بل تكبر النافذة وتصغر للحفاظ على تحقق شرط معين، مثل بقاء المجموع دون حد معين.
مؤشران ونافذة واحدة
احتفظوا بفهرسين، هما left وright، لتحديد حافتي النافذة. يوسّع المؤشر right النافذة، بينما يتبعه left لتصغيرها عند الحاجة.
left = 0
window = 0وسّعوا إلى اليمين
تحرّكوا عبر كل عنصر باتجاه اليمين وأدرجوه في النافذة. وحدّثوا حالتها الجارية، مثل إضافة القيمة الجديدة إلى مجموع.
for right in range(n):
window += a[right]صغّروا النافذة عند الحاجة
ما دامت النافذة تنتهك القاعدة، حرّكوا left إلى اليمين وأزيلوا ذلك العنصر. وبذلك يعود الشرط إلى التحقق دون الرجوع إلى الخلف.
while window > limit:
window -= a[left]
left += 1اقرؤوا النافذة الصالحة
عند انتهاء الحلقة الداخلية، تكون النافذة من left إلى right صالحة. ويكون طولها right ناقص left زائد واحد، وهي جاهزة للاستخدام.
length = right - left + 1سجّلوا أفضل نتيجة
حدّثوا إجابتكم باستخدام هذه النافذة الصالحة، وغالبًا ما تكون الأطول التي ظهرت حتى الآن. نفّذوا ذلك في كل تكرار حتى لا تفوتكم أي نافذة.
best = max(best, right - left + 1)لماذا الزمن خطي
يتحرك كل مؤشر إلى الأمام فقط ولا يعود إلى الخلف. ويتقدم left وright معًا بحد أقصى n خطوة، لذلك تكون عملية المرور كاملة بتعقيد O(n).
الشرط الرتيب
ينجح هذا الأسلوب عندما يجعل توسيع النافذة تحقيق الشرط أصعب فقط. وهذا السلوك الرتيب هو ما يسمح بعدم إعادة left إلى الخلف.
الأقصر في مقابل الأطول
للحصول على أقصر نافذة صالحة، صغّروا النافذة ما دام الشرط متحققًا وسجّلوا النتيجة قبل التوقف. وتبقى آلية المؤشرين نفسها.
while window >= target:
best = min(best, right - left + 1)
window -= a[left]
left += 1احذروا النوافذ الفارغة
إذا كان التصغير قد يفرغ النافذة، فتحققوا من تجاوز left لـ right. وتأكدوا أيضًا من العثور على إجابة فعلية قبل إعادتها.
اكتشاف النمط
استخدموا نافذة متغيرة عندما تطلب المسألة إيجاد مقطع متصل هو الأطول أو الأقصر ويحقق شرطًا على عناصره.
تحقق سريع
تطبقون نافذة متغيرة بمؤشرين على مصفوفة حجمها n.
مراجعة
وسّعوا right لإدراج العناصر، وصغّروا left عند خرق القاعدة، وسجّلوا كل نافذة صالحة. وتحافظ المؤشرات التي تتحرك إلى الأمام فقط على التعقيد O(n). ✅
الأسئلة الشائعة
هل درس «نافذة متغيرة بمؤشرين» مجاني؟
نعم — نص درس «نافذة متغيرة بمؤشرين» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «نافذة متغيرة بمؤشرين»؟
توسيع النافذة وتقليصها لتحقيق شرط تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «نافذة متغيرة بمؤشرين»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مجاميع نافذة ثابتة الحجم
- نافذة متغيرة بمؤشرين
- أطول سلسلة فرعية دون تكرار
- عدّ النوافذ التي تحقق قاعدة