数组中的逆序对
数组中的逆序对
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 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~