给定索引为1 <= i <= n
的数组A,找到第一个j i + 1 <= j <= n
,A[j] > A[i]
。要查找任何给定元素的反转总数,我们创建一个A和mergesort副本。然后,对于A中的每个i,我们对A的副本(称为B)执行二元搜索以找到它的位置,并且该元素的反转次数比它在该位置的位置少一个。 A的副本。我理解这一点,但我无法确定如何修改此方法以找到最小可能的转换。
示例:A = {8, 3, 34, 13, 1, 2, 21, 5}
复制和合并后:B = {1, 2, 3, 5, 8, 13, 21, 34}
指数:{5, 6, 2, 8, 1, 4, 7, 3}
我们看到A [1] = 8,在数组B上进行二进制搜索,我们在第5位找到8,算法应该返回34(索引3)。如果不存在反转,则返回-1。
复杂性应该是O(nlogn),我已经解决了这个问题几个小时并且无法想到解决方案,我能想到的只是找到倒置的数量而不是指数学家任何帮助将不胜感激。