面试题51:数组中的逆序对

一、题目

     在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6)(7,5)(7,4)(6,4)(5,4)

二、解法

    看到这道题目,第一反应是顺序扫描整个数组,没扫描到一个数字,逐个比较该数字和它后面数字的大小,如果后面的数字比它小,则这两个数字就组成一个逆序对,假设数组含有n个数字,由于每个数字都要喝O(n)个数字进行比较,因此这种算法的时间复杂度为O(n*n),我们可以尝试更快的算法。

2.1 方法一:

class Solution:
    def InversePairs(self, data):
        count = 0
        copy = []
        for i in data:
            copy.append(i)
        copy.sort()
        print(copy)
        for i in range(len(copy)):
            print(data.index(copy[i]))
            count += data.index(copy[i])
            data.remove(copy[i])
        return count


猜你喜欢

转载自blog.csdn.net/sinat_36161667/article/details/81044584