إنشاء شريحة تحتوي على عنصر
-
29-09-2020 - |
سؤال
لنفترض أن لدي المصفوفة:
[2, 3, 4, 5, 6, 7, 8, 9]
الآن بناءً على بعض المعلمات:
current_item
- العنصر المحدد حاليا.select_size
- حجم الاختيار، دائما غريب.
أريد الحصول على قائمة فرعية بالقائمة التي تتبع الشروط:
- العنصر الحالي يجب أن يكون في منتصف القائمة الفرعية إذا كان ذلك ممكنًا.
- في حالة عدم وجود عناصر كافية على يسار/يمين القائمة، استخدم العناصر الموجودة على اليمين/اليسار.
أمثلة:
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$.
لا تنتمي إلى cs.stackexchange