数组中的逆序对(python)

题目描述

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007

输入描述:

题目保证输入的数组中没有的相同的数字

数据范围:

对于%50的数据,size<=10^4

对于%75的数据,size<=10^5

对于%100的数据,size<=2*10^5

示例1

输入

复制
1,2,3,4,5,6,7,0

输出

复制
7
# -*- coding:utf-8 -*-
class Solution:
    def InversePairs(self, data):
        # write code here
        #用归并排序,归并拼接后用计算排序时元素的index变动了少
        _,s=self.MergeSort(data)
        return s%1000000007
    def MergeSort(self,data):
        n=len(data)
        #递归基
        if n==1:return data, 0
        #分两半来排序
        part1,part2=data[:n//2],data[n//2:]
        sorted_part1,s1=self.MergeSort(part1)
        sorted_part2,s2=self.MergeSort(part2)
        #排序后拼接这两半,拼接后先计数,然后将两个有序序列合并
        s,sorted_temp=0,sorted_part1+sorted_part2
        #用p、q两个指针指向两段,计算q中每个元素离插入点的index差
        p,q,len1,len_all=0,sorted_temp.index(sorted_part2[0]),len(sorted_part1),len(sorted_temp)
        while p

  

转载于:https://www.cnblogs.com/277223178dudu/p/10634808.html

你可能感兴趣的:(python,数据结构与算法)