陣列中的逆序對 ,使用歸併排序 求陣列中的逆序對
阿新 • • 發佈:2021-02-16
題目
https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/
歸併排序參考
https://mp.csdn.net/editor/html/112734224
程式碼
public class Solution { public int res = 0; public int ReversePairs(int[] nums) { res = 0; int[] temparray = new int[nums.Length]; System.Array.Copy(nums, temparray, nums.Length); Sort(nums, 0, nums.Length-1, temparray); return res; } private void Sort(int[] arr, int l, int r, int[] temparr) { if (l >= r) return; int mid = l + (r - l) / 2; Sort(arr, l, mid, temparr); Sort(arr, mid + 1, r, temparr); if (arr[mid].CompareTo(arr[mid + 1]) < 0) return; Morge(arr, l, mid, r, temparr); } public void Morge(int[] arr, int l, int mid, int r, int[] temparr) { System.Array.Copy(arr, l, temparr, l, r - l + 1); int i = l, j = mid + 1; for (var k = l; k <= r; k++) { if (i > mid) { arr[k] = temparr[j]; j++; } else if (j > r) { arr[k] = temparr[i]; i++; } else if (temparr[i].CompareTo(temparr[j]) <= 0) { arr[k] = temparr[i]; i++; } else { res += (mid - i + 1); arr[k] = temparr[j]; j++; } } } }