我搜索快速方法来执行我的问题。
想象一下订购的座位数从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>
我希望有人能理解我的问题。 谢谢你
答案 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