#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: 连续子数组的最大和