diff --git "a/leetcode3/\354\265\234\354\233\220\354\244\200/315. Count of Smaller Numbers After Self.py" "b/leetcode3/\354\265\234\354\233\220\354\244\200/315. Count of Smaller Numbers After Self.py" new file mode 100644 index 00000000..4b5e6bc2 --- /dev/null +++ "b/leetcode3/\354\265\234\354\233\220\354\244\200/315. Count of Smaller Numbers After Self.py" @@ -0,0 +1,46 @@ +class Solution: + def countSmaller(self, nums: List[int]) -> List[int]: + n = len(nums) + ans = [0] * n + + arr = [(num, i) for i, num in enumerate(nums)] + + def merge_sort(arr): + if len(arr) <= 1: + return arr + + mid = len(arr) // 2 + + left = merge_sort(arr[:mid]) + right = merge_sort(arr[mid:]) + + merged = [] + + i = 0 + j = 0 + smaller = 0 + + while i < len(left) and j < len(right): + if left[i][0] <= right[j][0]: + ans[left[i][1]] += smaller + merged.append(left[i]) + i += 1 + else: + smaller += 1 + merged.append(right[j]) + j += 1 + + while i < len(left): + ans[left[i][1]] += smaller + merged.append(left[i]) + i += 1 + + while j < len(right): + merged.append(right[j]) + j += 1 + + return merged + + merge_sort(arr) + + return ans