Pergunta

Suponha que eu tenha o array:

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

Agora com base em alguns parâmetros:

  1. current_item - item atualmente selecionado.
  2. select_size - tamanho da seleção, sempre ímpar.

Quero obter uma sublista da lista que siga as condições:

  1. item_atual deve estar no meio da sublista, se isso for possível.
  2. Caso não haja elementos suficientes à esquerda/direita da lista, use os da direita/esquerda.

Exemplos:

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]
Foi útil?

Solução

Seja o índice do item central $c$, e o comprimento da lista será $2r+1$.Assumimos que os índices da lista são $0,\ldots,n-1$.

Existem quatro casos a considerar:

  • Se $n > 2r+1$, os resultados serão indefinidos (de acordo com sua postagem).
  • Se $0 \leq c-r$ e $c+r \leq n-1$, então você apenas pega os elementos $c-r,\ldots,c+r$.
  • Se $c-r < 0$, então você pega elementos $0,\ldots,2r$.
  • Se $c+r \geqn$, então você pega elementos $n-2r-1,\ldots,n-1$.

Nos dois últimos casos, temos a garantia de estar dentro dos limites, uma vez que $n > 2r+1$.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange
scroll top