نظرًا لمجموعة من الأحرف، قم بضغطها باستخدام الخوارزمية التالية:
لا ينبغي إرجاع السلسلة المضغوطة بشكل منفصل، ولكن بدلاً من ذلك، يجب تخزينها في مجموعة أحرف الإدخال. لاحظ أنه سيتم تقسيم أطوال المجموعة التي تبلغ 10 أو أكثر إلى أحرف متعددة في الأحرف.
بعد الانتهاء من تعديل مصفوفة الإدخال، قم بإرجاع الطول الجديد للمصفوفة.
يجب عليك كتابة خوارزمية تستخدم مساحة إضافية ثابتة فقط.
لحل هذه المشكلة، نحتاج إلى التكرار عبر المصفوفة مع تتبع الحرف الحالي وعدده. عندما نواجه حرفًا جديدًا، نقوم بإلحاق الحرف الحالي وعدده (إذا كان أكبر من 1) بالمصفوفة. نحن بحاجة إلى التأكد من أننا نفعل ذلك في مكانه لتلبية متطلبات التعقيد المكاني.
يتضمن حل القوة الغاشمة إنشاء مصفوفة جديدة لتخزين النسخة المضغوطة من مصفوفة الإدخال. وهذا لا يوفر المساحة ولكنه يساعدنا على فهم الخطوات المتضمنة.
function compressBruteForce(chars: string[]): number { const n = chars.length; let compressed: string[] = []; let i = 0; while (i 1) { compressed.push(...count.toString().split('')); } } for (let j = 0; jتحليل تعقيد الوقت:
حل القوة الغاشمة ليس فعالاً في استخدام المساحة ولا يلبي قيود استخدام مساحة إضافية ثابتة فقط.
يتضمن الحل الأمثل تعديل مصفوفة الإدخال الموجودة لتخزين النسخة المضغوطة. نستخدم مؤشرين: أحدهما لقراءة مصفوفة الإدخال والآخر لكتابة الإخراج المضغوط.
function compress(chars: string[]): number { let writeIndex = 0; let i = 0; while (i 1) { let countStr = count.toString(); for (let j = 0; jتحليل تعقيد الوقت:
console.log(compressBruteForce(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compressBruteForce(["a"])); // 1, ["a"] console.log(compressBruteForce(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compressBruteForce(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compressBruteForce(["a","b","c"])); // 3, ["a","b","c"] console.log(compress(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compress(["a"])); // 1, ["a"] console.log(compress(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compress(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compress(["a","b","c"])); // 3, ["a","b","c"]
التلاعب بالسلسلة:
الخوارزميات الموضعية:
من خلال ممارسة مثل هذه المشكلات والاستراتيجيات، يمكنك تحسين مهاراتك في حل المشكلات والاستعداد بشكل أفضل لمواجهة تحديات البرمجة المختلفة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3