Genera la fetta che contiene elemento
-
29-09-2020 - |
Domanda
Supponiamo di avere l'array:
[2, 3, 4, 5, 6, 7, 8, 9]
.
Ora in base a pochi parametri:
- .
-
current_item
- Articolo attualmente selezionato. -
select_size
- Dimensioni selezione, sempre dispari. -
Current_item dovrebbe essere al centro del sublista se è possibile. - Nel caso in cui non ci siano abbastanza elementi a sinistra / destra dell'elenco, utilizzare quelli da destra / sinistra.
Voglio ottenere un sublista della lista che segue le condizioni:
- .
Esempi:
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]
.Soluzione
Lascia che l'indice dell'articolo centrale sia $ c $ e la lunghezza della lista è $ 2R + 1 $ . Supponiamo che gli indici della lista siano $ 0, \ Ldots, n-1 $ .
Ci sono quattro casi da considerare:
- .
- se $ n> 2r + 1 $ , quindi i risultati sono indefiniti (per il tuo post).
- se $ 0 \ leq CR $ e $ c + r \ leq n-1 $ , quindi Basti prendere gli elementi $ cr, \ ldots, c + r $ .
- se $ cr <0 $ , quindi prendi gli elementi $ 0, \ Ldots, 2R $ .
- se $ c + r \ geq n $ , quindi prendi gli elementi $ N-2R-1, \ Ldots , n-1 $ .
In quest'ultimo due casi, siamo garantiti per essere limitati da $ n> 2r + 1 $ .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange