例如,如果输入是(1,2,3,4,1),则ans是4 (1,2,3,4) - 大于0 (5,1,2,3) - →1 如果数组不包含重复元素,则解决起来非常简单(使用修改后的二进制搜索),但在这里,它包含重复元素? 提前致谢 !!
答案 0 :(得分:2)
我认为原始的O(log N)方法将不再适用于数组包含重复元素的情况。
由于存在重复元素,因此在搜索“转折点”(数组元素为最大元素的点,后跟min元素)时,不能排除一半数组元素。
例如:{1,1,1,1,2,1},a [0] = a [5] = a [(0 + 5)/ 2] = 1。 你不能丢弃一半的元素,因为没有足够的信息表明转折点在哪里。
因此,一个非常直接的方法是O(N)顺序搜索转折点。
答案 1 :(得分:0)
def find_rot(a):
m = min(a)
x = float("-inf")
for i, e in enumerate(a):
if x > e:
return i
x = e
return 0
找到小于前一个数字的第一个数字:该数字将是最大值翻到最小值的位置。如果没有这样的位置,那么阵列就不会旋转。