题解 | 数组中的逆序对
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int InversePairs (int[] nums) {
if (nums.length<2){
return 0;
}
int []temp = new int [nums.length];
//刚开始上面的两行互换了,导致出错,因为要选判断长度,在创建数组,一般要先判断。
// write code here
return findNum(0,nums.length-1,nums,temp);
}
public int findNum(int left,int right,int[] nums,int[]temp){
if (left>=right){
return 0;
}
int mid = (left+right)/2;
int res = findNum(left,mid,nums,temp)+findNum(mid+1,right,nums,temp);
res = res%1000000007;
//合并
//将nums的数组先复制到temp,然后将排序后的数放到nums;
for (int k = left;k<=right;k++){
temp[k] = nums[k];
}
int i = left,j = mid+1;
for (int k = left;k<=right;k++){
//排序
if(i>mid){
nums[k] = temp[j++];
}else if (j>right){
nums[k] = temp[i++];
}else if (temp[i]<=temp[j]){
nums[k] = temp[i++];
}else{
nums[k]=temp[j++];
int num = (mid-i+1)%1000000007;
res = res + num;
}
}
return res%1000000007;
}
}
这个题目很难,要多看几遍