1

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

i/p:

数组 (arr1) 2, 6, 4, 10, 8 ,12 ,11

旋转数组(arr2)4、10、8、12、11、2、6

o/p: 2

方法1:

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

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

2.从头开始将“first”与arr1的元素进行比较,直到到达arr1中的数字“first”。同时开始将“last”与arr1的元素从末尾开始进行比较,并不断递减,直到我们达到与arr1中的“last”等价的数字。

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

3.就是这样,无论是“第一个”还是“最后一个”,都会尽早找到它的等价物,然后打破并打印计数。

方法2:

取 arr2 的第一个元素并开始将其与 arr1 元素从 end 进行比较,直到找到匹配项。我们将arr1递减的次数等于旋转的次数

有没有比上面两个更好的方法?

4

1 回答 1

0

如果您“可以安全地假设元素不会重复”,那么没有比单步遍历 的元素arr1直到找到 的第一个元素更好的方法了arr2。你必须做的步数是你的左旋转。您可以通过从任一数组的长度中减去左旋转并减去 1 来计算右旋转。

于 2013-09-08T02:27:58.087 回答