Вопрос

Предположим, у меня есть массив:

[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]
Это было полезно?

Решение

Пусть индекс центрального элемента будет $c$, а длина списка будет $2р+1$.Мы предполагаем, что индексы списка равны $0,\ldots,n-1$.

Следует рассмотреть четыре случая:

  • Если $n > 2r+1$, то результаты не определены (согласно вашему сообщению).
  • Если $0 \leq c-r$ и $c+r \leq n-1$, тогда вы просто берете элементы $c-r,\ldots,c+r$.
  • Если $c-r < 0$, затем вы берете элементы $0,\ldots,2r$.
  • Если $c+r \geq n$, затем вы берете элементы $n-2r-1,\ldots,n-1$.

В последних двух случаях мы гарантированно находимся в пределах границ, поскольку $n > 2r+1$.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top