JZ35-数组中的逆序对
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
public class Solution {
int count = 0;
public int InversePairs(int[] array) {
if (array == null || array.length <= 1) {
return 0;
}
mergeSort(array, 0, array.length - 1);
return count;
}
public void mergeSort(int[] array, int start, int end) {
if (start >= end) {
return;
}
int mid = start + ((end - start) >> 1);
mergeSort(array, start, mid);
mergeSort(array, mid + 1, end);
merge(array, start, mid, end);
}
public void merge(int[] array, int start, int mid, int end) {
int[] temp = new int[end - start + 1];
int i = start;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= end) {
if (array[i] <= array[j]) {
temp[k++] = array[i++];
} else {
temp[k++] = array[j++];
count = (count + (mid - i + 1)) % 1000000007; //不能+=;而且不能在上面取余
}
}
while (i <= mid) {
temp[k++] = array[i++];
}
while (j <= end) {
temp[k++] = array[j++];
}
for(int l=start;l<=end;l++){
array[l] = temp[l-start];
}
}
}
查看8道真题和解析
