您可以遍历数组并检查所有值是否都在增加。一旦您命中第一个没有增加的值,请检查它和以下所有值是否增加,并且小于或等于数组中的第一个元素。
编辑:
我觉得人们低估了丹尼尔的解决方案,因为他们不理解它或认为它已经坏了。这很可悲,因为我认为他的解决方案非常出色。
def is_circular_sorted(arr):
count = 0
length = len(arr)
for i in range(length):
if arr[i] > arr[(i+1) % len(arr)]:
count += 1
return count <= 1
In [4]: is_circular_sorted([1, 2, 3, 4])
Out[4]: True
In [5]: is_circular_sorted([1, 1, 1, 1])
Out[5]: True
In [6]: is_circular_sorted([1, 3, 4, 7, -9])
Out[6]: True
In [7]: is_circular_sorted([1, 3, 4, 2])
Out[7]: False
为了一点点的解释。为了检查列表是否是循环排序的,我原来的答案是,你需要检查是否有一个或更少的“中断”被完全排序,并且“中断”之后的所有数字都小于数组中的第一个数字。
然而,正如丹尼尔的答案所显示的那样,你不需要在“中断”之后检查所有数字,只需要检查最后一个数字(这也恰好是中断后的最大/最大数字,因为它们是排序的)。
应始终有一个中断,除非列表填充相同的数字,在这种情况下,不会有中断,计数将为 0。