查找循环序列中的旋转次数

时间:2013-09-08 02:01:37

标签: c algorithm

我被用户给了两个数组。我的代码应该找出它向左或向右旋转了多少。我们可以安全地假设元素不会重复。

I / P:

array(arr1)2,6,4,10,5,12,11

旋转阵列(arr2)4,10,8,12,11,2,6

o / p:2

方法一:

我解决这个问题的方法是这样的:

1.从旋转的数组中取出第一个元素,并从旋转的数组中取出最后一个元素。分别将它们命名为“第一”和“最后”。并将计数初始化为0

2.从头开始比较“first”和arr1的元素,直到我们在arr1中达到“first”的数字。同时开始将“last”与结尾的arr1元素进行比较并继续递减,直到我们达到arr1中相当于“last”的数字。

3.我们可以在步骤2的同一for循环中对上面的步骤2进行递增和递减。并且还递增计数变量。

3.Thats it,无论哪个“first”或“last”找到它的等价物,然后打破并打印计数。

方法2:

获取arr2的第一个元素并开始将其与末尾的arr1元素进行比较,直到找到匹配为止。我们减少arr1的次数等于旋转次数

有两种更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果你“可以安全地假设元素不重复”,那么除了arr1的元素之外,没有比找到arr2的第一个元素更好的方法了。您必须进行的步骤是左旋转。您可以通过从任一阵列的长度减去左旋转并减去1来计算右旋转。