例如具有n=10
元素的数组:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
循环左移 3
,所以第一个数字是 f=3
以生成数组:
[3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
从i=8
到j=1
有d=3
步,即从左到右的距离d
。从i=8
到j=3
有d=5
步,因为在2
之后循环跳转到3
(将其视为一个环)。当 n
和 f
已知时,通常如何计算两个数字 i,j
之间的距离 d
,假设数组总是包含循环左移的连续整数,初始值从 0
开始?
最佳答案
如果你想知道任何方向的距离,那么这只是一个减法的问题。如果 i=8 且 j=5,则距离为 |j-i|
(j-i
的绝对值),因此为 3。
但是,如果您想要将 j
放在 i
的位置所需的周期数,那么它对应于:
if j - i < 0
answer = j - i + n
else
answer = j - i
因此对于 i=8 和 j=5,其中 n=10,则为 5-8+10=7。但这甚至可能不是你想要的,问题不是很清楚。编辑:等等,我的原则是 i 和 j 是数组中的位置,而不是值。这可能令人困惑:/
关于algorithm - 如何计算循环移位的连续整数之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28544347/