获取一个无序直线的数字,该数字遵循间隔的起始值

时间:2010-12-10 15:01:58

标签: arrays

我搜索快速方法来执行我的问题。

想象一下订购的座位数从1到8,想象他们是座位上的人[2,6,5,3]。我想在座位号4(起始值)之后找回第二个(间隔+2)人

例如:

使用此数组: [2,5,8,7,1] ,我从值 3 开始,我移动 +2 次, 列表中的第三个下一个数字是5,第二个是 7 ,该方法必须返回此值

使用相同的 [2,5,8,7,1] ,我从 7 开始,我移动 +3 次 这里方法必须返回最小值。 8 .. 1 .. 2 ..,结果: 2

[1,3] ,开始 4 ,计算 +2 ,结果 3

[5,3,9] ,开始 3 ,计算 +1 ,结果 5 < / p>

[5,3,9] ,开始 3 ,计算 +2 ,结果 9 < / p>

我希望有人能理解我的问题。 谢谢你

2 个答案:

答案 0 :(得分:4)

对列表进行排序,使用bisect查找起始索引,然后按列表长度修改加法结果。

答案 1 :(得分:0)

因此,这基本上只是Python中Ignacio算法的一个示例实现:

from bisect import bisect

def circular_highest(lst, start, move):
    slst = sorted(lst)
    return slst[(bisect(slst, start) - 1 + move) % len(lst)]

print circular_highest([2, 5, 8, 7, 1], 3, 2)
print circular_highest([2, 5, 8, 7, 1], 7, 3)
print circular_highest([1, 3], 4, 2)
print circular_highest([5, 3, 9], 3, 1)
print circular_highest([5, 3, 9], 3, 2)

输出:

7
2
3
5
9