此题跟1804-Brainman相似,不过数据更强了。1840可以用暴力求解(时间为O(n^2)),而这道则不行。
题意:给出一组数,通过不断交换两个相邻的数,可以使这组数按非递减顺序排列。问,最小的交换次数是多少?
分析:设一组数存储在A[](初始状态 ),若A[i] > A[i+1],则交换这两个数。这一操作只会使逆序对个数减少1,对于这两个数左右两端的逆序对个数没有影响。如此,不断地交换这样的两个相邻的数,每次交换都会使逆序对个数减少1,直至A[]有序为止,此时,逆序对个数也刚好减少为0。
代码: