假设我有阵列:

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

现在基于少数参数:

  1. current_item - 当前选择的项目。
  2. select_size - 选择大小,总是奇数。
  3. 我想得到条件下面的列表的子呢?

    1. current_item 如果可能的话,应该是sublist的中间。
    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 $

有四个案例需要考虑:

  • 如果 $ 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 $

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top