public int reversePairs(int[] nums) {
if (nums == null || nums.length == 0) {
mergeSort(nums, 0, n - 1, res);
public void mergeSort(int[] nums, int start, int end, int[] res) {
int mid = start + (end - start) / 2;
mergeSort(nums, start, mid, res);
mergeSort(nums, mid + 1, end, res);
int left = start, right = mid + 1;
if (right <= end && (nums[left] > 2 * (long)nums[right])) {
merge(nums, start, mid, end);
public void merge(int[] nums, int start, int mid, int end) {
int[] temp = new int[end - start + 1];
while (i <= mid && j <= end) {
for (int m = start; m <= end; m++) {
nums[m] = temp[m - start];