HTMLify
Count Inversions
Views: 14 | Author: prakhardoneria
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | class Solution: def inversionCount(self, arr): def merge_and_count(temp_arr, left, mid, right): i = left j = mid + 1 k = left inv_count = 0 while i <= mid and j <= right: if arr[i] <= arr[j]: temp_arr[k] = arr[i] i += 1 else: temp_arr[k] = arr[j] inv_count += (mid - i + 1) j += 1 k += 1 while i <= mid: temp_arr[k] = arr[i] i += 1 k += 1 while j <= right: temp_arr[k] = arr[j] j += 1 k += 1 for loop_var in range(left, right + 1): arr[loop_var] = temp_arr[loop_var] return inv_count def merge_sort(temp_arr, left, right): inv_count = 0 if left < right: mid = (left + right) // 2 inv_count += merge_sort(temp_arr, left, mid) inv_count += merge_sort(temp_arr, mid + 1, right) inv_count += merge_and_count(temp_arr, left, mid, right) return inv_count n = len(arr) temp_arr = [0] * n return merge_sort(temp_arr, 0, n - 1) |