【数据结构算法】数组中的逆序对

题目

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

思路

整体思路:归并排序
在这里插入图片描述
过程:先把数组分割成子数组,先统计出子数组内部的逆序对的数目,然后再统计出两个相邻子数组之间的逆序对的数目。在统计逆序对的过程中,还需要对数组进行排序。如果对排序算法很熟悉,我们不难发现这个过程实际上就是归并排序

count = 0
class Solution:
    def InversePairs(self, data):
        global count
        def MergeSort(lists):
            global count
            if len(lists) <= 1:
                return lists
            num = int( len(lists)/2 )
            left = MergeSort(lists[:num])
            right = MergeSort(lists[num:])
            r, l=0, 0
            result=[]
            while l<len(left) and r<len(right):
                if left[l] < right[r]:
                    result.append(left[l])
                    l += 1
                else:
                    result.append(right[r])
                    r += 1
                    count += len(left)-l
            result += right[r:]
            result += left[l:]
            return result
        MergeSort(data)
        return count%1000000007
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构算法中,逆序的是将原来正序排列的元素按照相反的顺序重新排列。逆序常见于链表、数组等数据结构的操作中。以下是一些常见的逆序操作: 1. 链表逆序:对于一个单向链表,可以通过修改针的向来实现逆序。具体操作是从头节点开始,依次将每个节点的向前一个节点,直到到达尾节点。 2. 数组逆序:对于一个数组,可以通过交换元素的位置来实现逆序。具体操作是定义两个针,一个向数组的起始位置,另一个向数组的末尾位置,然后交换它们所向的元素,并逐步向中间移动针,直到两个针相遇。 3. 字符串逆序:对于一个字符串,可以通过反转字符串中的字符顺序来实现逆序。具体操作是定义两个针,一个向字符串的起始位置,另一个向字符串的末尾位置,然后交换它们所向的字符,并逐步向中间移动针,直到两个针相遇。 4. 栈逆序:对于一个栈,可以通过借助一个辅助栈来实现逆序。具体操作是将原始栈中的元素依次弹出,并压入辅助栈中,然后再将辅助栈中的元素依次弹出并压回原始栈中。 逆序操作在实际应用中非常常见,可以用来解决各种问题,如字符串反转、链表反转、数组反转等。通过逆序操作,可以改变原始数据的顺序,从而得到所需的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值