Domanda

Supponiamo di avere l'array:

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

Ora in base a pochi parametri:

    .
  1. current_item - Articolo attualmente selezionato.
  2. select_size - Dimensioni selezione, sempre dispari.
  3. Voglio ottenere un sublista della lista che segue le condizioni:

      .
    1. Current_item dovrebbe essere al centro del sublista se è possibile.
    2. Nel caso in cui non ci siano abbastanza elementi a sinistra / destra dell'elenco, utilizzare quelli da destra / sinistra.
    3. 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]
      
      .

È stato utile?

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
scroll top