一、题目内容

image.png

二、题解

解法1:

思路

count+=mid+1-i;
count%=1000000007;

代码

  1. public class Solution {
  2. int count = 0;
  3. public int InversePairs(int [] array) {
  4. if(array.length<2){
  5. return 0;
  6. }
  7. mergeSort(array,0,array.length-1);
  8. return count;
  9. }
  10. private void mergeSort(int[] array,int left,int right){
  11. int mid = left+(right-left)/2;
  12. if(left<right){
  13. // 左子数组
  14. mergeSort(array,left,mid);
  15. // 右子数组
  16. mergeSort(array,mid+1,right);
  17. merge(array,left,mid,right);
  18. }
  19. }
  20. private void merge(int[] array,int left,int mid,int right){
  21. int[] arr = new int[right-left+1];
  22. int arrIdx = 0;
  23. int i = left,j = mid+1;
  24. while(i<=mid&&j<=right){
  25. if(array[i]<=array[j]){
  26. arr[arrIdx++] = array[i++];
  27. }else{
  28. arr[arrIdx++] = array[j++];
  29. count+=mid+1-i;
  30. count%=1000000007;
  31. }
  32. }
  33. while(i<=mid){
  34. arr[arrIdx++] = array[i++];
  35. }
  36. while(j<=right){
  37. arr[arrIdx++] = array[j++];
  38. }
  39. for(int num:arr){
  40. array[left++] = num;
  41. }
  42. }
  43. }