سؤال

لنفترض أن لدي المصفوفة:

[2, 3, 4, 5, 6, 7, 8, 9]

الآن بناءً على بعض المعلمات:

  1. current_item - العنصر المحدد حاليا.
  2. select_size - حجم الاختيار، دائما غريب.

أريد الحصول على قائمة فرعية بالقائمة التي تتبع الشروط:

  1. العنصر الحالي يجب أن يكون في منتصف القائمة الفرعية إذا كان ذلك ممكنًا.
  2. في حالة عدم وجود عناصر كافية على يسار/يمين القائمة، استخدم العناصر الموجودة على اليمين/اليسار.

أمثلة:

list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 5
select_size: 3

result: [4, 5, 6]


list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 2
select_size: 5

result: [2, 3, 4, 5, 6]

list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 8
select_size: 5

result: [5, 6, 7, 8, 9]
هل كانت مفيدة؟

المحلول

دع فهرس العنصر المركزي يكون $ج$, ، ويكون طول القائمة $2r+1$.نحن نفترض أن مؤشرات القائمة هي $0،\ldots،n-1$.

هناك أربع حالات يجب أخذها بعين الاعتبار:

  • لو $ن> 2ص+1$, ، فإن النتائج غير محددة (حسب مشاركتك).
  • لو $0 \leq ج-r$ و $c+r \leq n-1$, ، فأنت تأخذ العناصر فقط $c-r,\ldots,c+r$.
  • لو $ج-ص <0$, ، ثم تأخذ العناصر $0،\ldots،2r$.
  • لو $c+r \geq n$, ، ثم تأخذ العناصر $n-2r-1,\ldots,n-1$.

في الحالتين الأخيرتين، نحن نضمن أن نكون ضمن الحدود منذ ذلك الحين $ن> 2ص+1$.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top