目录
- 题目:
- 解析:
- 代码:
题目:
链接: link
解析:
代码:
class Solution {int[] tmp;public int reversePairs(int[] record) {tmp = new int[record.length];return mergeSort(record,0,record.length-1);}private int mergeSort(int[] record, int left, int right){if(left >= right) return 0;int ret = 0;int mid = (right + left) / 2;int cur1 = left, cur2 = mid+1, i = 0;//左半部分的个数 + 排序,右半部分的个数 + 排序ret += mergeSort(record,left, mid);ret += mergeSort(record, mid+1, right);//一左一右的个位数 + 排序while(cur1 <= mid && cur2 <= right){if(record[cur1] <= record[cur2]){tmp[i++] = record[cur1++];//排序} else {ret += mid - cur1 + 1;tmp[i++] = record[cur2++];//排序}} while(cur1 <= mid) tmp[i++] = record[cur1++];while(cur2 <= right) tmp[i++] = record[cur2++];for(int j = left; j <= right; j++){record[j] = tmp[j-left];}return ret;}
}