質問

次の配列があるとします。

[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$, 、リストの長さは $2r+1$. 。リストのインデックスは次のとおりであると仮定します。 $0,\ldots,n-1$.

考慮すべきケースは 4 つあります。

  • もし $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$.

後者の 2 つのケースでは、範囲内にあることが保証されます。 $n > 2r+1$.

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top