数组中求逆序对的个数
在归并排序的过程中计算,时间复杂度降低
public int InversePairs(int [] array) { if(array==null||array.length==0) return 0; int count=merge(array,0,array.length-1); return count; } private int merge(int[] array, int left, int right) { if(left==right) return 0; int mid=(left+right)/2; int leftCount=merge(array,left,mid); int rightCount=merge(array,mid+1,right); int i=left,j=mid+1; int res=leftCount+rightCount; int[] temp=new int[right-left+1]; int k=0; while(i<=mid&&j<=right) { if(array[i]<=array[j]) { temp[k++]=array[i++]; } else { res+=mid-i+1; if(res>=1000000007)//数值过大求余 { res%=1000000007; } temp[k++]=array[j++]; } } while (i <= mid) temp[k++] = array[i++]; while (j <= right) temp[k++] = array[j++]; for (k = 0; k < temp.length; k++) array[left + k] = temp[k]; return res%1000000007; }
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/11237584.html
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号