نظرًا لمصفوفة أعداد صحيحة، قم بإرجاع إجابة مصفوفة بحيث تكون الإجابة[i] مساوية لمنتج جميع عناصر الأعداد باستثناء الأعداد[i].
يضمن المنتج الذي يحتوي على أي بادئة أو لاحقة من الأرقام أن يتناسب مع عدد صحيح 32 بت.
يجب عليك كتابة خوارزمية يتم تشغيلها في وقت O(n) ودون استخدام عملية القسمة.
هل يمكنك حل المشكلة في تعقيد المساحة الإضافية O(1)؟ (لا يتم احتساب مصفوفة الإخراج كمساحة إضافية لتحليل تعقيد المساحة.)
لحل هذه المشكلة، نحتاج إلى حساب حاصل ضرب جميع العناصر باستثناء العنصر الحالي دون استخدام عملية القسمة. يمكن القيام بذلك باستخدام تمريرتين على المصفوفة:
يمكننا استخدام مصفوفتين لتخزين منتجات البادئة واللاحقة، ثم ضربهما للحصول على النتيجة النهائية.
function productExceptSelf(nums: number[]): number[] { const n = nums.length; const prefixProducts = new Array(n).fill(1); const suffixProducts = new Array(n).fill(1); const result = new Array(n).fill(1); // Compute prefix products for (let i = 1; i = 0; i--) { suffixProducts[i] = suffixProducts[i 1] * nums[i 1]; } // Compute the result by multiplying prefix and suffix products for (let i = 0; iتحليل تعقيد الوقت:
يعمل الحل الأساسي بشكل جيد ولكنه يستخدم مساحة إضافية لتخزين منتجات البادئة واللاحقة.
يمكننا تحسين الحل لاستخدام مساحة O(1) الإضافية باستخدام مصفوفة الإخراج لتخزين المنتجات البادئة أولاً ثم تعديلها في مكانها لتشمل المنتجات اللاحقة.
function productExceptSelfOptimized(nums: number[]): number[] { const n = nums.length; const result = new Array(n).fill(1); // Compute prefix products in the result array for (let i = 1; i = 0; i--) { result[i] = result[i] * suffixProduct; suffixProduct *= nums[i]; } return result; }
console.log(productExceptSelf([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelf([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelf([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelf([0,0])); // [0,0] console.log(productExceptSelf([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelf([1,2])); // [2, 1] console.log(productExceptSelfOptimized([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelfOptimized([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelfOptimized([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelfOptimized([0,0])); // [0,0] console.log(productExceptSelfOptimized([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelfOptimized([1,2])); // [2, 1]
صفيف مجموع البادئة:
الخوارزميات الموضعية:
معالجة المصفوفة:
من خلال ممارسة مثل هذه المشكلات والاستراتيجيات، يمكنك تحسين مهاراتك في حل المشكلات والاستعداد بشكل أفضل لمواجهة تحديات البرمجة المختلفة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3