From 0818a53dbea5af25d86904f6eba116065a6553c2 Mon Sep 17 00:00:00 2001 From: Won Joon Thomas Choi <113500771+724thomas@users.noreply.github.com> Date: Sun, 23 Aug 2026 23:17:25 +0900 Subject: [PATCH] Create 315. Count of Smaller Numbers After Self.py --- ...5. Count of Smaller Numbers After Self.py" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "leetcode3/\354\265\234\354\233\220\354\244\200/315. Count of Smaller Numbers After Self.py" 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