使用索引周围的指定填充获取所需长度的子数组

时间:2017-07-10 19:09:19

标签: arrays

很抱歉,如果这是重复的 - 我试图搜索并没有找到任何东西。

给定一个数组,一个索引和两个填充量,我想从初始数组中获取一个子数组,该数组集中在请求的索引周围。

以下是我期望的一些伪代码示例:

idx = (whatever index the 'X' is located at)
left_pad = 3
right_pad = 1

array = [. . . . . . X . . . . . .]
expected_results = [. . . X .]

array = [. X . . . . . .]
expected_results = [. X . . .]

array = [. . . . . . X]
expected_results = [. . . . X]

array = [. X . .]
expected_results = [. X . .]

etc...

因此它始终包含传入的原始索引,然后尝试包含所需的填充 - 但如果填充不可能,则尝试至少使用所需的长度。如果长度不可能,它只会尽可能地给它。

数组的值无关紧要,因为idx应该是索引,而不是实际搜索的值。

我似乎在许多不同的语言中遇到过类似的问题,所以我要求更多关于理论实现而不是语言特定的实现。

1 个答案:

答案 0 :(得分:1)

我将假设idx始终在数组中(即不超出数组的范围),因为您没有提供何时idx不在数组中的示例。

首先,您应该检查数组的长度:

if(array length < right_pad - left_pad)
    print all array values
else
    step 2

如果数组足够大以包含填充,请检查填充索引是否存在:

if(array[idx+right_pad] exist and array[idx-left_pad])
    loop from left_pad to right_pad and print values
elseif(array[idx+right_pad] exist)
    loop from array[0] to array[right_pad+left_pad-idx] and print values
elseif(array[idx+left_pad] exist)
    loop from array[left_pad - right_pad + (max_array_index - idx)] to array[max_array_value] and print values

这应该考虑到所有情况:填充的数组太小,填充足够大,右边填充足够大,或者左边填充足够大。

相关问题