前言:“语文是读懂题目的前提,数学是做对题目的基础。”当两者都不兼备的时候,
那就把这题让了吧。逆序对是什么?期望又是什么?这是博主当时在做这道题目的真实想法。现在想想,无论是逆序对还是期望,二者任意一个概念不清楚都不太可能做出来,所以本道题目的复盘工作把时间都花在了收集资料上(绝对不是玩了一个五一假期的缘故)
一、题目分析
逆序对,简单来讲是一组值与排序不相符的数字,例如(3,2)在顺序(自然数排序)排序里就是一对逆序对,因为3排在了2之前,但是3的值要比2大,不符合排序的标准,换成数组来理解就比较清晰了。假设有一个顺序数组 a[10],里面存放了1,2,3……10等数字,但是其中有一对数字的位置互换了,遍历整个数组,就会出现 i < j,而a[ i ] > a[ j ]的情况,这个时候我们就称 i 和 j 为一组逆序对。那么我们也会明锐的觉察到,如果一个顺序数列的开头和结尾的位置互换了,那么从头开始往后数的每一个数字都能和首个数字组成一组逆序对,这种情况下出现的逆序对的数量是最多的。因此,不同位置的交换会影响逆序对数量,我们需要一一例举出每种交换位置的情况。
求逆序数,可以通过基本的双重循环遍历去寻找,但是程序的时间复杂度比较大,再嵌套进必要的循环里,运行时间就会非常长了,本人也是不大喜欢dfs类的解法,所以在这里我们使用归并算法进行求逆序对的这个操作。