关注
public class Solution { // 模数,用于防止溢出 public int mod = 1000000007; /** * 归并排序的变种,既排序数组也计算逆序对 * @param left 区间左端点 * @param right 区间右端点 * @param data 原数组 * @param temp 临时数组 * @return 逆序对数量 */ public int mergeSort(int left, int right, int [] data, int [] temp) { // 如果左端点大于或等于右端点,说明只有一个元素或没有元素,直接返回0 if (left >= right) return 0; // 计算区间中间位置 int mid = (left + right) / 2; // 递归地对左半部分和右半部分分别进行排序,并加上各自的逆序对数量 int res = mergeSort(left, mid, data, temp) + mergeSort(mid + 1, right, data, temp); // 防止res超出int的范围 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; } /** * 计算数组中的逆序对数量 * @param array 输入数组 * @return 逆序对数量 */ public int InversePairs(int [] array) { int n = array.length; int[] res = new int[n]; // 创建临时数组 // 对整个数组进行归并排序并计算逆序对数量 return mergeSort(0, n - 1, array, res); } }
点赞
相关推荐
牛客热帖
更多
- 1... 一个三无废物985硕士的求救帖!Help8333
- 2... 两年后重看秋招——后悔选择读研,可到底该怎么做?7563
- 3... 秋招公司情报局,分享线索得牛币💰7466
- 4... 字节客户端一面7369
- 5... 月薪一万五,天天都喊苦5607
- 6... 技术不是唯一答案:计算机大学生的第一堂社会课4465
- 7... 手机厂工作一年了,给想进手机行业的兄弟们写点建议4118
- 8... 字节暑期实习三周跑路会被拉黑吗3820
- 9... 机械读研的核心优势是?3242
- 10... 凌晨一点我不可以睡觉吗?我要被你侮辱?我晚上会做噩梦的呜呜呜3037
正在热议
更多
# 大厂面试初体验 #
5854次浏览 42人参与
# 如果可以,你希望哪个公司来捞你 #
101072次浏览 460人参与
# 如何提高实习转正率? #
2431次浏览 30人参与
# leader认为你工作不认真怎么办 #
30956次浏览 142人参与
# 你遇到过哪些神仙同事 #
100387次浏览 724人参与
# 我的国央企投递进展 #
46714次浏览 293人参与
# 国企是理工四大天坑的最好选择吗 #
13719次浏览 95人参与
# 五一之后,实习真的很难找吗? #
78572次浏览 515人参与
# 机械人,你被简历秒挂的企业有哪些? #
43054次浏览 281人参与
# 招聘要求与实际实习内容不符怎么办 #
113055次浏览 770人参与
# 如果公司给你放一天假,你会怎么度过? #
17149次浏览 129人参与
# 找工作时的取与舍 #
80515次浏览 568人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
246394次浏览 1792人参与
# 三一重工求职进展汇总 #
15127次浏览 68人参与
# OPPO求职进展汇总 #
662998次浏览 5041人参与
# 你的秋招第一场笔试是哪家 #
142884次浏览 1453人参与
# 总结:哪家公司面试体验感最差 #
61139次浏览 276人参与
# 如果重来一次你还会读研吗 #
176974次浏览 1786人参与
# 机械人,说说你的烦心事 #
69745次浏览 839人参与
# 面试时被问的最奇葩的问题 #
23032次浏览 130人参与