当前位置: 首页 > 后端技术 > Java

JZ-035-Areversepairinanarray

时间:2023-04-02 10:06:18 Java

AreversepairinarrayTitle描述一个数组中的两个数字。如果前一个数大于后一个数,则这两个数形成一对反向数。输入一个数组,求出这个数组中反转对的总数P。并输出P对1000000007取模的结果。即输出P%1000000007题目链接:数组中的倒序对代码/***题目:数组中的倒序对*题目描述*数组中的两个数,如果前一个数大于后一个数,那么这两个数就形成了一对颠倒的数。输入一个数组,求出这个数组中反转对的总数P。并输出P对1000000007取模的结果。即输出P%1000000007*问题链接:*https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=13&&tqId=11188&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-排名*/publicclassJz35{privatelongcnt=0;私人int[]tmp;//在这里声明辅助数组,而不是在merge()递归函数中声明publicintinversePairs(int[]array){tmp=newint[array.length];mergeSort(数组,0,array.length-1);返回(int)(cnt%1000000007);}privatevoidmergeSort(int[]nums,intl,inth){if(h-l<1){返回;}intm=l+(h-l)/2;mergeSort(nums,l,m);mergeSort(nums,m+1,h);merge(nums,l,m,h);}privatevoidmerge(int[]nums,intl,intm,inth){inti=l,j=m+1,k=l;while(i<=m||j<=h){if(i>m){tmp[k]=nums[j++];}否则如果(j>h){tmp[k]=nums[i++];}elseif(nums[i]<=nums[j]){tmp[k]=nums[i++];}else{tmp[k]=nums[j++];这个.cnt+=m-i+1;//nums[i]>nums[j],表示nums[j..mid]大于nums[j]}k++;}for(k=l;k<=h;k++){nums[k]=tmp[k];}}publicstaticvoidmain(String[]args){}}【每日留言】每一天都是新的开始,每一天都会有最好的运气