51. 数组中的逆序对
优质
小牛编辑
195浏览
2023-12-01
题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
解题思路
// java private long cnt = 0; private int[] tmp; // 在这里声明辅助数组,而不是在 merge() 递归函数中声明 public int InversePairs(int[] nums) { tmp = new int[nums.length]; mergeSort(nums, 0, nums.length - 1); return (int) (cnt % 1000000007); } private void mergeSort(int[] nums, int l, int h) { if (h - l < 1) return; int m = l + (h - l) / 2; mergeSort(nums, l, m); mergeSort(nums, m + 1, h); merge(nums, l, m, h); } private void merge(int[] nums, int l, int m, int h) { int i = l, j = m + 1, k = l; while (i <= m="" ||="" j="" m) tmp[k] = nums[j++]; else if (j > h) tmp[k] = nums[i++]; else if (nums[i] nums[j],说明 nums[i...mid] 都大于 nums[j] } k++; } for (k = l; k <= h;="" k++)="" nums[k]="tmp[k];" }=""