我被用户给了两个数组。我的代码应该找出它向左或向右旋转了多少。我们可以安全地假设元素不会重复。
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的次数等于旋转次数
有两种更好的方法吗?
答案 0 :(得分:0)
如果你“可以安全地假设元素不重复”,那么除了arr1
的元素之外,没有比找到arr2
的第一个元素更好的方法了。您必须进行的步骤是左旋转。您可以通过从任一阵列的长度减去左旋转并减去1来计算右旋转。