إزالة التكرارات في مكانها
استخدام زوج من المؤشرين البطيء والسريع
إزالة التكرارات في مكانها درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
احذف التكرارات في المكان
لديك مصفوفة مرتبة، وعليك الاحتفاظ بنسخة واحدة من كل قيمة من دون استخدام مصفوفة إضافية. يوفر التنفيذ في المكان الذاكرة، وهو سؤال شائع في المقابلات. 🧹
لماذا يساعد الترتيب
عندما تكون المصفوفة مرتبة، تكون كل قيمة مكررة ملاصقة لنظيرتها. لذلك لا تحتاج إلا إلى مقارنة العناصر المتجاورة، وليس المصفوفة بأكملها.
دوران مختلفان، مؤشّران
استخدم مؤشر slow لتحديد آخر قيمة احتفظت بها، ومؤشرًا سريعًا يتقدم في المصفوفة بحثًا عن قيمة جديدة.
slow = 0
fast = 1المؤشر slow يكتب
فكّر في slow على أنه موضع الكتابة: كل ما يقع عنده أو قبله نُظّف بالفعل وأصبح فريدًا.
المؤشر fast يقرأ
يكتفي المؤشر fast بالقراءة إلى الأمام. فهو يسبق غيره، ولا ينبه slow إلا عندما يعثر على قيمة لم يُحتفظ بها بعد.
تجاوز التكرارات
إذا كانت a[fast] تساوي a[slow]، فهي تكرار، ولذلك لا تفعل شيئًا سوى زيادة fast. وهكذا يتم تجاوز القيمة المكررة بهدوء.
for fast in range(1, n):
if a[fast] == a[slow]:
continueعثرت على شيء جديد
عندما تختلف a[fast]، حرّك slow إلى الأمام وانسخ القيمة الجديدة في موضعه. يؤدي ذلك إلى استبدال التكرارات القديمة ببيانات فريدة جديدة.
else:
slow += 1
a[slow] = a[fast]الإجابة هي الطول
بعد انتهاء الفحص، تكون قيمة slow + 1 هي عدد القيم الفريدة، وجميعها مجمعة في بداية المصفوفة.
return slow + 1تجاهل الذيل
كل ما يوجد بعد البادئة الفريدة هو بيانات متبقية غير مهمة. فالمسألة تهتم بالعناصر slow + 1 الأولى فقط، لذا اترك الذيل كما هو.
انتبه إلى المصفوفة الفارغة
تحتوي المصفوفة الفارغة على صفر من القيم الفريدة. تحقّق من n == 0 قبل البدء حتى لا تقرأ بعد نهاية المصفوفة.
if n == 0:
return 0مرور واحد، من دون مساحة إضافية
يعمل هذا النمط البطيء-السريع في زمن O(n) وبمساحة إضافية O(1)، وهو بالضبط ما تتطلبه قيود الذاكرة الصارمة.
تحقّق سريع
أنت تزيل التكرارات في المكان من مصفوفة مرتبة باستخدام مؤشري slow وfast.
مراجعة
في المصفوفة المرتبة، يزيل زوج slow-fast التكرارات في مرور واحد بتعقيد O(n) ومن دون مساحة إضافية، ويعيد slow + 1 بوصفه عدد القيم الفريدة. 🎉
الأسئلة الشائعة
هل درس «إزالة التكرارات في مكانها» مجاني؟
نعم — نص درس «إزالة التكرارات في مكانها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «إزالة التكرارات في مكانها»؟
استخدام زوج من المؤشرين البطيء والسريع تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «إزالة التكرارات في مكانها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مؤشران في مصفوفة مرتبة
- العثور على زوج ذي مجموع محدد
- إزالة التكرارات في مكانها
- دمج تسلسلين مرتبين