質問
次の配列があるとします。
[2, 3, 4, 5, 6, 7, 8, 9]
いくつかのパラメータに基づいて次のようになります。
current_item
- 現在選択されている項目。select_size
- 選択サイズ、常に奇数。
次の条件に従うリストのサブリストを取得したいと考えています。
- 現在の項目 可能であれば、サブリストの途中にある必要があります。
- リストの左側または右側に十分な要素がない場合は、右側または左側の要素を使用します。
例:
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$.
所属していません cs.stackexchange