面试题51
示例 1:
输入: [7,5,6,4]
输出: 5限制:
Solutions
class Solution {
public:
int res = 0;
vector<int> tmp;
int reversePairs(vector<int>& nums) {
tmp = vector<int>(nums.size() / 2 + 1);
merge_sort(nums, 0, nums.size());
return res;
}
void merge(vector<int> & nums, int lo, int mid, int hi) {
copy(nums.begin() + lo, nums.begin() + mid, tmp.begin());
int w = lo, i = 0, j = mid, maxi = mid - lo;
while (i < maxi && j < hi) {
if (nums[j] < tmp[i]) {
res += maxi - i;
nums[w++] = nums[j++];
}
else
nums[w++] = tmp[i++];
}
while (i < maxi)
nums[w++] = tmp[i++];
}
void merge_sort(vector<int> & nums, int lo, int hi) {
if (hi - lo < 2) return;
int mid = lo + ((hi - lo) >> 1);
merge_sort(nums, lo, mid);
merge_sort(nums, mid, hi);
if (nums[mid - 1] > nums[mid])
merge(nums, lo, mid, hi);
}
};Last updated