java简单实现数组中的逆序对

网友投稿 253 2023-01-12


java简单实现数组中的逆序对

题目描述:

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007

解题思路:

一开始一头雾水,后面想到了使用归并排序的思想,其实有多少个逆序对,就是归并排序的时候,后面的数要超越前面多少个,嗯,好像不是很好说,要不然直接看代码吧。还要注意,题目当中说要输出取模的结果,这说明数据可能非常大,所以如果只是单纯的在最后取模的话可能还是无法避免数据太大的影响,所以我们在每次更新count的http://时候就对其进行取模运算。

刚好又练习了一遍归并排序,记录一下

public class Solution {

int count;

public int InversePairs(int [] array) {

count = 0;

if(array != null){

divPairs(array, 0, array.length-1);

}

return count%1000000007;

}

public void divPairs(int[] array, int start, int end){

if(start >= end)

return;

int mid = (start + end)>>1;

divPairs(array, start, mid);

divPairs(array, mid+1, end);

mergePairs(array, start, mid, end);

}

public void mergePairs(int[] array, int start, int mid, int end){

int i = start, j = mid+1, k = 0;

int[] temp = new int[end-start+1];

while(i <= mid && j <= end){

if(array[i] <= array[j]){

temp[k++] = array[i++];

}else{

temp[k++] = array[j++];

count += mid - i + 1;

count %= 1000000007;

}

}

while(i <= mid){

temp[k++] = array[i++];

}

while(j <= end){

temp[k++] = array[j++];

}

for(int x = 0; x < temp.length; x++){

array[start+x] = temp[x];

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关是api网关吗(微服务api网关的作用)
下一篇:eclipse下整合springboot和mybatis的方法步骤
相关文章

 发表评论

暂时没有评论,来抢沙发吧~