可以找到问题here。 这是我尝试过的方法,但答案却不对。我的逻辑是这样。在任何时候,如果排序队列和状态队列中位置的差为负,则将差的绝对值加到混乱中。现在,如果我面临两个相应的正差,并且前一个位置的数字大于状态队列中的当前数字,则我将混乱加1。
def minimumBribes(q):
truth = None
old = 0
chaos = 0
for i in range(len(q)):
diff = (i+1)-q[i]
if diff < -2:
print("Too chaotic")
return
if diff < 0 :
chaos = chaos + abs(diff)
truth = True
continue
else:
if truth == True:
truth = False
old = q[i]
continue
if old > q[i]:
chaos = chaos + 1
old = q[i]
print(chaos)
答案 0 :(得分:1)
通过比较无法计算线性时间的倒数。有一个理论约束。 https://cs.stackexchange.com/questions/74515/can-we-count-the-number-of-inversions-in-time-mathcalon
您可以使用Fenwick树(也称为二进制索引树)来解决它。此处描述了这个想法(https://www.geeksforgeeks.org/count-inversions-array-set-3-using-bit/)。
答案 1 :(得分:0)
如果我正确理解了问题,那么您要做的就是重复一次,如果值大于索引,则减去(值-(索引+ 1))。
这些差异的总和是贿赂的数量,如果个人差异大于2,则是“太混乱了”。
例如对于25134,(2-1)+(5-2)= 4,但是5-2 = 3,所以您只需输出“太混乱”