<p>Given the array <code>nums</code>, for each <code>nums[i]</code> find out how many numbers in the array are smaller than it. That is, for each <code>nums[i]</code> you have to count the number of valid <code>j&#39;s</code>&nbsp;such that&nbsp;<code>j != i</code> <strong>and</strong> <code>nums[j] &lt; nums[i]</code>.</p>

<p>Return the answer in an array.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [8,1,2,2,3]
<strong>Output:</strong> [4,0,1,1,3]
<strong>Explanation:</strong> 
For nums[0]=8 there exist four smaller numbers than it (1, 2, 2 and 3). 
For nums[1]=1 does not exist any smaller number than it.
For nums[2]=2 there exist one smaller number than it (1). 
For nums[3]=2 there exist one smaller number than it (1). 
For nums[4]=3 there exist three smaller numbers than it (1, 2 and 2).
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [6,5,4,8]
<strong>Output:</strong> [2,1,0,3]
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> nums = [7,7,7,7]
<strong>Output:</strong> [0,0,0,0]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>2 &lt;= nums.length &lt;= 500</code></li>
	<li><code>0 &lt;= nums[i] &lt;= 100</code></li>
</ul>

class Solution:
    def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
        sorted_num = copy.deepcopy(nums)
        self.mergeSort(sorted_num, 0, len(nums) - 1)
        result = []
        for num in nums:
            result.append(sorted_num.index(num))
        return result

    def mergeSort(self, nums: List[int], l:int, r:int)-> List[int]:
        if l < r:
            mid = (l + r) // 2
            self.mergeSort(nums, l, mid)
            self.mergeSort(nums, mid + 1, r)
            self.merge(nums, l, mid, r)

    def merge(self, arr: List[int], l: int, mid:int, r:int) -> List[int]:
        left_arr = arr[l:mid+1]
        right_arr = arr[mid+1:r+1]
        n1 = len(left_arr)
        n2 = len(right_arr)
        i = j = 0
        k = l
        while i < n1 and j < n2:
            if left_arr[i] <= right_arr[j]:
                arr[k] = left_arr[i]
                i += 1
                k += 1
            elif right_arr[j] <= left_arr[i]:
                arr[k] = right_arr[j]
                j += 1
                k += 1

        while i < n1:
            arr[k] = left_arr[i]
            i += 1
            k += 1
        while j < n2:
            arr[k] = right_arr[j]
            j += 1
            k += 1
        
83