很抱歉,如果这是重复的 - 我试图搜索并没有找到任何东西。
给定一个数组,一个索引和两个填充量,我想从初始数组中获取一个子数组,该数组集中在请求的索引周围。
以下是我期望的一些伪代码示例:
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
应该是索引,而不是实际搜索的值。
我似乎在许多不同的语言中遇到过类似的问题,所以我要求更多关于理论实现而不是语言特定的实现。
答案 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
这应该考虑到所有情况:填充的数组太小,填充足够大,右边填充足够大,或者左边填充足够大。