我以后要常下象棋!可以锻炼细心程度!
public class Solution {
public int reversePairs(int[] nums) {
int n = nums.length;
return revPairs(nums,0,n-1);
}
private int revPairs(int[] nums,int l,int r){
if(l>=r) return 0;
int m = (l+r)/2;
int ans = revPairs(nums,l,m) + revPairs(nums,m+1,r);
int[] copy = new int[r-l+1];
int h = m+1,t = m+1;
int j = 0;
for(int i=l;i<=m;i++){
int cnt = 0;
while(h<=r&&(long)nums[h]*2<(long)nums[i]) {h++;cnt++;} //<h must be
while(t<=r&&nums[t]<nums[i]) copy[j++] = nums[t++];
copy[j++] = nums[i];
ans += cnt*(m-i+1);
}
System.arraycopy(copy,0,nums,l,t-l);
return ans;
}
}