题
假设我有阵列:
[2, 3, 4, 5, 6, 7, 8, 9]
.
现在基于少数参数:
-
current_item
- 当前选择的项目。 -
select_size
- 选择大小,总是奇数。 - current_item 如果可能的话,应该是sublist的中间。 如果列表左/右侧没有足够的元素,请使用右/左的元素。
我想得到条件下面的列表的子呢?
示例:
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 $ 。
有四个案例需要考虑:
- 如果 $ n> 2r + 1 $ ,则结果未定义(每个您的帖子)。
- 如果 $ 0 \ leq cr $ 和 $ c + r \ leq n-1 $ ,那么您只需拍摄元素 $ cr,\ ldots,c + r $ 。
- 如果 $ cr <0 $ ,那么您需要元素 $ 0,\ ldots,2r $ 。
- 如果 $ c + r \ geq n $ ,那么您需要元素 $ n-2r-1,\ ldots ,n-1 $ 。
在后两种情况下,我们保证在界限内,因为 $ n> 2r + 1 $ 。
不隶属于 cs.stackexchange