【发布时间】:2015-09-14 01:56:52
【问题描述】:
我有一个整数数组,比如{1, 3, 4, 7, -9, 0}。这个数组是循环排序的,而数组{2, 4, 9 , 3}不是循环排序的。
如果数组的元素除旋转外都已排序,则数组是循环排序的。
例如:
4 5 6 7 1 2 3
这里的元素1 2 3 4 5 6 7 是“按顺序”排列的,但它们向左旋转了三倍。因此,如果我们向右旋转 3,我们会得到 1 2 3 4 5 6 7,这是一个排序数组。
给定一个数组,如何判断该数组是否循环排序?
【问题讨论】:
-
也许您想与我们分享您迄今为止所尝试的一切?
-
例如:4 5 6 7 1 2 3 这里的元素(1 2 3 4 5 6 7)是“按顺序”排列的,但是向左旋转了三个。跨度>
-
我已投票决定重新开放。我最近也遇到了这个问题并找到了解决方案。有一种蛮力的方法,也有一种优雅的方法……你想要哪个? :P
-
数一下
value[i] > value[(i+1)%length]的次数。如果答案为 0 或 1,则循环排序。 -
@Tom,这就是
(i+1)%length的用途。它检查最后一个数字(在您的示例中为 2)是否大于第一个数字(在您的示例中为 1)。因为2>1那么这个算法会有两个“中断”并且失败。看看我回答中的编辑示例,我添加了你的测试用例。