1

假设我有一个大小为 4 的数组,并且有 5 个元素

1)  0,1,2,3
2)  4,0,1,2 after 1st rotation
3)  3,4,0,1 after 2nd rotation
4)  2,3,4,0 after 3rd rotation 
5)  1,2,3,4 after 4th rotation
6)  0,1,2,3 after 5th rotation 

正如我们所看到的,这个数字在 5 次迭代后会重复。有没有一种有效的方法来搜索数组的第 k 个元素?说N转之后??

4

2 回答 2

2

假设数组索引是从零开始的。

要计算 N 次旋转后 M 元素数组的第 K 个值的索引,您应该使用以下表达式

(K + N) mod M

所以给定一个数组arr,你应该得到这样的值(使用类似 C 的语法):

arr[(K + N) % M];
于 2013-01-26T14:24:48.510 回答
1

最简单的做法是将组合放入某种数组中,然后直接索引数字。事先确保这些数字也有效可能是值得的。我相信这会做(假设第一行是0,第一列是0,如果你想通过加法改变起点,请调整)

elements=[0,1,2,3,4]
out=elements((K-N)%5

快速测试:

N=1, K=3, out=2 correct
N=5, K=1, out=1 correct
于 2013-01-26T14:21:54.270 回答