206 - 315 计算右侧小于当前元素的个数
题目
解答
class Solution:
def countSmaller(self, nums: List[int]) -> List[int]:
if not nums:
return []
res = [0]*len(nums)
tupn = [(n, i) for i, n in enumerate(nums)]
def divide(tupn):
if len(tupn) == 1:
return tupn
mid = len(tupn)//2
left = divide(tupn[:mid])
right = divide(tupn[mid:])
return conquer(left, right)
def conquer(left, right):
sor = []
i = j = 0
while i < len(left) and j < len(right):
if left[i][0] > right[j][0]:
sor.append(left[i])
res[left[i][1]] += len(right)-j
i += 1
else:
sor.append(right[j])
j += 1
sor.extend(left[i:] or right[j:])
return sor
divide(tupn)
return resLast updated