数组中的逆序对
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=13&tqId=11188&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey
使用归并排序,右边小的上去就可以知道前面有多少个比它大的了
public class Solution {
int count = 0;
public int InversePairs(int [] array) {
if(array.length < 2)
return 0;
mergeSort(array,0,array.length-1);
return count;
}
public void mergeSort(int[] array,int left,int right){
int mid = left+(right-left)/2;
if(left < right){
mergeSort(array,left,mid);
mergeSort(array,mid+1,right);
merge(array,left,mid,right);
}
}
public void merge(int[] array,int left,int mid,int right){
int[] arr = new int[right-left+1];
int c = 0;
int s = left;
int l = left;
int r = mid+1;
while(l <= mid && r <= right ){
if(array[l] <= array[r]){
arr[c] = array[l];
c++;
l++;
}else{
arr[c] = array[r];
count += mid+1-l;
count %= 1000000007;
c++;
r++;
}
}
while(l <= mid)
arr[c++] = array[l++];
while(r <= right)
arr[c++] = array[r++];
for(int num:arr){
array[s++] = num;
}
}
}
剑指offer 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~
