#yyds干货盘点# 解决剑指offer:数组中的逆序对

Posted 97的风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 解决剑指offer:数组中的逆序对相关的知识,希望对你有一定的参考价值。

1.简述:

描述

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

数据范围:  对于  的数据, 

对于  的数据, 

数组中所有数字的值满足 

要求:空间复杂度 ,时间复杂度 

输入描述:

题目保证输入的数组中没有的相同的数字

示例1

输入:

[1,2,3,4,5,6,7,0]

返回值:

7

示例2

输入:

[1,2,3]

返回值:

0

2.代码实现:

public class Solution 
public int mod = 1000000007;
public int mergeSort(int left, int right, int [] data, int [] temp)
//停止划分
if(left >= right)
return 0;
//取中间
int mid = (left + right) / 2;
//左右划分合并
int res = mergeSort(left, mid, data, temp) + mergeSort(mid + 1, right, data, temp);
//防止溢出
res %= mod;
int i = left, j = mid + 1;
for(int k = left; k <= right; k++)
temp[k] = data[k];
for(int k = left; k <= right; k++)
if(i == mid + 1)
data[k] = temp[j++];
else if(j == right + 1 || temp[i] <= temp[j])
data[k] = temp[i++];
//左边比右边大,答案增加
else
data[k] = temp[j++];
// 统计逆序对
res += mid - i + 1;


return res % mod;

public int InversePairs(int [] array)
int n = array.length;
int[] res = new int[n];
return mergeSort(0, n - 1, array, res);



以上是关于#yyds干货盘点# 解决剑指offer:数组中的逆序对的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 解决剑指offer: 连续子数组的最大和

#yyds干货盘点#剑指 Offer 04. 二维数组中的查找

#yyds干货盘点# 解决剑指offer:构建乘积数组

#yyds干货盘点# 解决剑指offer:数组中重复的数字

#yyds干货盘点# 解决剑指offer:最小的K个数

#yyds干货盘点# 解决剑指offer:滑动窗口的最大值