يعد العثور على مصفوفة فرعية بمجموع معين مشكلة شائعة تظهر غالبًا في مقابلات البرمجة والبرمجة التنافسية. يمكن حل هذه المشكلة باستخدام تقنيات مختلفة، ولكل منها مقايضاتها الخاصة فيما يتعلق بالتعقيد الزمني والتعقيد المكاني. في هذه المقالة، سنستكشف طرقًا متعددة لحل مشكلة العثور على مصفوفة فرعية بمجموع معين في Java.
بالنظر إلى مصفوفة من الأعداد الصحيحة والمجموع المستهدف، ابحث عن مصفوفة فرعية مستمرة في المصفوفة تضيف ما يصل إلى المجموع المحدد. يمكن تقسيم المشكلة إلى قسمين رئيسيين:
دعونا نستكشف طرقًا مختلفة لحل هذه المتغيرات.
يتضمن نهج القوة الغاشمة التحقق من جميع المصفوفات الفرعية الممكنة وحساب مجموعها لمعرفة ما إذا كان أي منها يساوي المجموع المستهدف. يعمل هذا الأسلوب مع كلا المتغيرين ولكنه غير فعال بالنسبة للمصفوفات الكبيرة بسبب التعقيد الزمني التربيعي.
public class SubarraySumBruteForce { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int n = arr.length; for (int start = 0; startالإخراج
Subarray found from index 1 to 3تحليل
يعتبر أسلوب النافذة المنزلقة فعالاً بالنسبة للمصفوفات التي تحتوي على أرقام موجبة فقط. تتضمن هذه التقنية الحفاظ على نافذة من العناصر التي تضيف ما يصل إلى المبلغ المستهدف. يتم توسيع النافذة بإضافة عناصر حتى يتجاوز المجموع الهدف، ويتم تقليصها عن طريق إزالة العناصر من البداية حتى يصبح المجموع أقل من أو يساوي الهدف.
public class SubarraySumSlidingWindow { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int start = 0; int currentSum = 0; for (int end = 0; end targetSum && startالإخراج
Subarray found from index 1 to 3تحليل
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3