题解 | 数组中的逆序对

数组中的逆序对

https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return int整型
#
class Solution:
    """
    暴力超时
    """
    def InversePairs1(self , nums: List[int]) -> int:
        # write code here
        if not nums and len(nums)==1:
                return 0
        count=0
        n=len(nums)
        for i in range(n):
            
            for j in range(i,n):
                if nums[i]>nums[j]:
                    count+=1
        return  count 
    
    def InversePairs(self , nums: List[int]) -> int:
        if not nums or len(nums)<=1:
            return 0 
        def mergesort(left ,right):
            if left>=right:
                return 0
            mid =left+(right-left)//2
            # 递归
            count=mergesort(left,mid)+mergesort(mid+1,right)
            # 合并排序之后的两个数组
            i,j,temp=left,mid+1,[]
            while i<=mid and j<=right:
                if nums[i]<=nums[j]:
                    temp.append(nums[i])
                    i+=1
                else:
                    temp.append(nums[j])
                    j+=1
                    count+=mid-i+1 # 计算此时[i:mid] 这几个都是大于j 指向的数字
                    count=count %1000000007

            # 合并剩下的
            temp.extend(nums[i:mid+1])
            temp.extend(nums[j:right+1])
            #print(temp)
            nums[left:right+1]=temp
            return count 
        return  mergesort(0,len(nums)-1)  % 1000000007
                    



全部评论

相关推荐

自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
吴offer选手:我卡在笔试才是最好笑的,甚至没给我发过笔试链接
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
06-04 18:37
门头沟学院 Java
勇敢的ssr求对象:前面看的有点奔溃,看到只有你是真玩啊,忍不住笑出了声😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务