题解 | #数组中的逆序对#
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5
import java.util.*;
public class Solution {
public int res = 0;
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int InversePairs (int[] nums) {
// write code here
if(nums.length == 0||nums.length == 1){
return 0;
}
int start = 0;
int end = nums.length-1;
mergeSort(nums,start,end);
return res;
}
private void mergeSort(int[] nums, int start, int end) {
// TODO
if(start>=end){
return;
}
int middle = (start+end)/2;
mergeSort(nums,start,middle);
mergeSort(nums,middle+1,end);
merge(nums,start,middle,end);
}
private void merge(int[] nums, int start, int middle, int end) {
// TODO
int mod = 1000000007;
int left = start;
int right = middle+1;
int[] tmp = new int[end-start+1];
int index = 0;
while(left<=middle&&right<=end){
if(nums[right]<nums[left]){
res += middle-left+1;
res %= mod;
tmp[index] = nums[right];
index++;
right++;
}else{
tmp[index] = nums[left];
index++;
left++;
}
}
if(left<=middle){
for(int i = left; i <= middle; i++){
tmp[index++] = nums[i];
}
}else{
for(int i = right; i <= end; i++){
tmp[index++] = nums[i];
}
}
for(int i = start; i <= end; i++){
nums[i] = tmp[i-start];
}
}
}

查看21道真题和解析