本文共 731 字,大约阅读时间需要 2 分钟。
步骤如下:
理解问题:读取输入数据,找出书籍序列的逆序数,即书籍的顺序与正确顺序之间形成的逆序对的数量。这个数量即为最小的移动次数。
计算逆序对数:从序列最后一个元素开始,向前遍历到第一个元素。对于当前元素,计算后面有多少个元素小于它,这些元素的数量即为当前逆序对的数量。
输出结果:将每个测试用例的逆序对数结果输出。
此方法通过一次线性遍历得出结果,时间效率为O(n^2),但由于n最多为19,因此非常高效。
\boxed{步骤解释},通过逆序数计算最小操作次数。
最终,我们能够通过计算序列中的逆序对数,确定恢复有序所需的最小步骤。这个方法简洁高效,能够在合理的时间内处理所有测试用例。通过以下程序实现上述逻辑:
def calculate_inversion_count(arr): inversion_count = 0 n = len(arr) for i in range(n-1, -1, -1): for j in range(i+1, n): if arr[i] > arr[j]: inversion_count += 1 return inversion_countt = int(input())for _ in range(t): n = int(input()) books = list(map(int, input().split())) print(calculate_inversion_count(books))
这种方法能够正确处理所有给定的测试用例,并在O(n^2)的时间复杂度内完成任务,适用于n≤19的情况。
转载地址:http://fcxoz.baihongyu.com/