leetcode 计算右侧小于当前元素的个数 python 之利用归并排序的思想

不容易啊
需要记录计数器,还有记录原来的位置,很麻烦

class Solution(object):
    def countSmaller(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        def merge(A,B,counterA,counterB,indexA,indexB):
            a_cur=0
            b_cur=0
            M=[]
            counterM=[]
            counterM_ind=[]
            while a_cur<len(A) and b_cur<len(B):
                if A[a_cur]<=B[b_cur]:
                    M.append(A[a_cur])
                    counterM.append(counterA[a_cur]+b_cur)
                    counterM_ind.append(indexA[a_cur])
                    a_cur+=1
                else:
                    M.append(B[b_cur])
                    counterM.append(counterB[b_cur])
                    counterM_ind.append(len(A)+indexB[b_cur])
                    b_cur+=1
            if a_cur==len(A):
                M=M+B[b_cur:]
                counterM_ind=counterM_ind+map(lambda x: x+len(A),indexB[b_cur:])
                counterM=counterM+counterB[b_cur:]
            else:
                M=M+A[a_cur:]
                counterM_ind=counterM_ind+indexA[a_cur:]
                counterM=counterM+map(lambda x: x+b_cur,counterA[a_cur:])
            return M,counterM,counterM_ind
        
        def m_sort(X):
            if len(X)==1:
                return X,[0],[0]
            mid_ind=int(len(X)/2)
            left=X[0:mid_ind]
            right=X[mid_ind:]
            A,counterA,indexA=m_sort(left)
            B,counterB,indexB=m_sort(right)
            return merge(A,B,counterA,counterB,indexA,indexB)
        
        if len(nums)==0:
            return nums
        _,counter,index=m_sort(nums)
        res=[0]*len(nums)
        for i in range(len(index)):
            res[index[i]]=counter[i]
        return res
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,807评论 1 32
  • 上路就不回很远! 想多了就在做梦! 快乐源于发现问题! 现在就是最好的时机! 干什么都不如定下来,静下来! 你感觉...
    能量在此阅读 3,222评论 0 2
  • 不能直接使用函数 ,只能在样式里引用
    panw3i阅读 3,097评论 0 0
  • 从开始犹豫要不要参加简书日更,到日更45天,没想到竟然坚持下来了,还获得了第一个小奖励,礼物还没有到手,但已经按捺...
    淡然_3e57阅读 793评论 0 0
  • 二十七年前的冬月里,鹅毛大雪已经飘了很多天。银装素裹,分外妖娆,大雪纷飞的景色中,大毛出生在普通的农家,开始了她无...
    大毛_田阅读 1,007评论 0 0