Python merge sort se da cuenta de que el número de elementos a la derecha es menor que el número actual

class Solution:
    def countSmaller(self, nums: List[int]) -> List[int]:
        n = len(nums)
        # 返回值
        ret = [0] * len(nums) 
        numsNew = []
        for i, num in enumerate(nums):
            numsNew.append((i,num))

        def merge_sort(arr):
            if len(arr) < 2:
                return arr
            mid = len(arr) // 2
            left = merge_sort(arr[:mid])
            right = merge_sort(arr[mid:])
            return merge(left, right)

        def merge(left, right):
            tmp = []
            i = 0
            j = 0
            while i < len(left) or j < len(right):
                if j == len(right) or i < len(left) and left[i][1] <= right[j][1]:
                    tmp.append(left[i])
                    ret[left[i][0]] += j
                    i += 1
                else:
                    tmp.append(right[j])
                    j += 1
            return tmp
        merge_sort(numsNew)
        return ret

Supongo que te gusta

Origin blog.csdn.net/weixin_42173136/article/details/124761497
Recomendado
Clasificación