题解 | #数组中的逆序对#

数组中的逆序对

https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=295&tqId=23260&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param data int整型一维数组
# @return int整型
#
class Solution:
    def InversePairs(self, data: list[int]) -> int:
        # write code here
        print(data)

        def megre_sort(L, R):
            if L >= R:
                return 0


            #求中间值
            mid = L + (R - L) // 2

            #求数组的左半部分和右半部分
            cnt = megre_sort(L, mid) + megre_sort(mid + 1, R)
            i = L
            j = mid + 1
            pos = L
            while i <= mid and j <= R:
                if data[i] < data[j]:
                    tmp[pos] = data[i]
                    i += 1

                else:
                    tmp[pos] = data[j]
                    cnt += mid - i + 1
                    j += 1
                pos += 1

            #如果未排序完,将剩下的没排序的数组排序
            for k in range(i, mid + 1):
                tmp[pos] = data[k]
                pos += 1

            for k in range(j, R + 1):
                tmp[pos] = data[k]
                pos += 1

            #拷贝tmp到data数组
            data[L : R + 1] = tmp[L : R + 1]
            return cnt

        n = len(data)
        tmp = [0] * n
        return megre_sort(0, n - 1) % 1000000007


# combine
# left= 1 2 3 4

# right = 5 6 7 0


# left = 12
# right= 3 4


# left=1
# right=2


# data = list(input().split())
# print()

全部评论

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务