c - 找出循环序列中的旋转次数

标签 c algorithm

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

我/我:

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

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

对/对:2

方法一:

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

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

2.从头开始比较“first”和arr1的元素,直到我们到达arr1中的“first”。同时开始比较"last"和arr1中从末尾开始的元素,一直递减,直到达到与arr1中"last"等价的数。

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

3.就是这样,无论“first”还是“last”中的哪个早点找到它的等价物,然后中断并打印计数。

方法二:

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

有没有比以上两种更好的方法?

最佳答案

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

关于c - 找出循环序列中的旋转次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18679693/

相关文章:

c - 通过 BASH 在 C 中指定命令行参数

c - 读取字符串中的 gcc 输出

c - 慢 OMP 与串行

c# - 线段的多边形

algorithm - 范围 split 问题

c - Lua 加载屏幕 - courotines 与 C 线程

将 float 转换为 C 中的科学记数法(非标准格式)?

c# - 给定 10 个函数 y=a+bx 和 1000 个四舍五入为整数的 (x,y) 数据点,如何导出 10 个最佳 (a,b) 元组?

arrays - 从两个排序数组中找到第 k 个最小元素

C++ 使用第三个序列作为标准检查两个序列是否相等