أنماط النوافذ ذات المؤشرين والنوافذ المنزلقة
النمط 1: نافذة ثابتة (مثل النافذة = 4 أو بعض القيم الصحيحة)
على سبيل المثال، في حالة وجود مجموعة من الأعداد الصحيحة (-ve و ve)، ابحث عن الحد الأقصى لمجموع النافذة المتجاورة بالحجم k.
النمط 2:(حجم النافذة المتغير) أكبر مصفوفة فرعية/سلسلة فرعية مع مثال النمط 3: عدد المصفوفة الفرعية/السلسلة الفرعية حيث يمكن حل هذه المشكلة باستخدام النمط 2 يمكن تقسيم ذلك إلى النمط 4: ابحث عن النافذة الأقصر/الحد الأدنى أساليب مختلفة للنمط 2: أسلوب أفضل باستخدام المؤشرين والنافذة المنزلقة المنهج الأمثل: سيكون النهج الأمثل هو تقليص اليسار فقط طالما أن طول المصفوفة الفرعية أكبر من maxLen عندما لا تستوفي المصفوفة الفرعية الشرط (
من الصعب جدًا حل هذه المشكلة لأنه يصبح من الصعب متى تتوسع (يمينًا) أو متى تتقلص (يسارًا).
لحل مشاكل مثل العثور على عدد السلاسل الفرعية حيث sum =k.
مثال: أكبر مصفوفة فرعية تحتوي على مجموع
public class Sample{
public static void main(String args[]){
n = 10;
int arr[] = new int[n];
//Brute force approach for finding the longest subarray with sum k) break; /// optimization if the sum is greater than the k, what is the point in going forward?
}
}
//O(n n) in the worst case r will move from 0 to n and in the worst case left will move from 0 0 n as well so 2n
int left = 0;
int right =0;
int sum = 0;
int maxLen = 0;
while(right
نحن نعلم أنه إذا وجدنا المصفوفة الفرعية فإننا نقوم بتخزين طولها في maxLen، ولكن أثناء إضافة arr[right] إذا أصبح المجموع أكثر من k، فإننا حاليًا نقوم بتقليص اليسار عن طريق فعل sum = sum-arr[left] والقيام باليسار.
نحن نعلم أن الحد الأقصى للطول الحالي هو maxLen، إذا واصلنا تقليص الفهرس الأيسر فقد نحصل على مصفوفة فرعية أخرى تحقق الشرط ( maxLen، ثم سيتم تحديث maxLen فقط. int right =0;
int sum = 0;
int maxLen = 0;
while(right
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3