代码是正确的但是对于超级大的输入时还是超时了。
运用分治排序的思想
import java.util.Arrays;
public class 数组中的逆序对 {
public static void main(String[] args) {
int[] arr = {37,40,48,90,32,5,12,3,44,13};
// System.out.println(reversePairs(arr));
System.out.println(Arrays.toString(arr));
}
public static int reversePairs(int[] nums) {
if(nums.length==0) return 0;
int sort = sort(0,nums.length-1,nums);
return sort;
}
private static int sort(int left, int right, int[] nums) {
if(left == right) {
return 0;
}
int ans = 0;
int mid = left+(right-left)/2;
ans += sort(left,mid,nums);
ans += sort(mid+1,right,nums);
int[] copyOf = Arrays.copyOf(nums, nums.length);
int p1 = left;
int p2 = mid+1;
int index = left;
while(p1<=mid&&p2<=right) {
if(copyOf[p1]>copyOf[p2]) {
nums[index++] = copyOf[p2++];
ans += mid-p1+1;
// System.out.println(mid-p1+1);
// System.out.println(ans);
}else {
nums[index++] = copyOf[p1++];
}
}
while(index<=right) {
if(p1<=mid) {
nums[index++] = copyOf[p1++];
}else if(p2<=right){
nums[index++] = copyOf[p2++];
}
}
return ans;
}
}