给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。
你需要返回给定数组中的重要翻转对的数量。
示例 1:
输入: [1,3,2,3,1]
输出: 2
示例 2:
输入: [2,4,3,5,1]
输出: 3
注意:
给定数组的长度不会超过50000。
输入数组中的所有数字都在32位整数的表示范围内。
思路:这道题难度挺大,主要是要实现nlogn复杂度的方法,用归并排序可以实现这个功能,右边都已经排好序
class Solution {
public:
void merge(vector<int>&A,int left,int mid,int right){
int n1 = mid - left + 1;
int n2 = right - mid;
vector<int>L(n1);
vector<int>R(n2);
for(int i=0;i<n1;i++) L[i] = A[left+i];
for(int j=0;j<n2;j++) R[i] = A[mid+j+1];
int i = 0,j = 0;
for(int k=left;k<=right;k++){
if(j>=n2 || (i<n1 && L[i]<=R[j]){
A[k] = L[i++];
}else{