Reverse Pairs Posted on 2018-10-05 Descriptionhttps://leetcode.com/problems/reverse-pairs/description/ Solution123456789101112131415161718192021222324252627282930class Solution {public: int reversePairs(vector<int>& nums) { int size = nums.size(); if (size == 0 || size == 1) return 0; int ret = 0; findReversePair(nums, 0, size - 1, ret); // for (int i = 0; i < size; i++) cout << nums[i] << endl; return ret; } void findReversePair(vector<int>& nums, int left, int right, int& ret) { // cout << left << " " << right << endl; if (left >= right) return; int mid = left + (right - left) / 2; findReversePair(nums, left, mid, ret); findReversePair(nums, mid + 1, right, ret); //Check the number and sort the array int l = left; int r = mid + 1; while (l <= mid && r <= right) { while(l <= mid && nums[l]/2.0 <= nums[r]) {++l; ret += (r - mid - 1);} while(r <= right && nums[l]/2.0 > nums[r]) ++r; } while (l <= mid) {++l; ret += (r - mid - 1);} sort(nums.begin()+left, nums.begin()+right+1); }};