www

导航

数组中的逆序对

public class Solution {
  
public int InversePairs(int[] array) {   if(array==null||array.length<2) return 0;   int[] copy=new int[array.length];   int ret = mergeCount(array,copy,0,array.length-1);   return ret;   }   private int mergeCount(int[] array, int[] copy, int start, int end){
  
if(start==end){   copy[start]=array[start];   return 0;   }   int mid=(start+end)/2;   int leftCount=mergeCount(array,copy,start,mid);   int rightCount=mergeCount(array,copy,mid+1,end);   int index=end;   int count=0;   int i=mid, j=end;   while(i>=start&&j>=mid+1){   if(array[i]>array[j]){   copy[index--]=array[i--];   count+=j-mid;   } else {   copy[index--]=array[j--];   }   }   for(;i>=start;i--){   copy[index--]=array[i];   }   for(;j>=mid+1;j--){   copy[index--]=array[j];   }   for(int s=start; s<=end; s++){   array[s]=copy[s];   }   return leftCount+rightCount+count;   } }

 

posted on 2019-03-12 18:36  www_practice  阅读(151)  评论(0编辑  收藏  举报