概述
逆序对数
问题描述:
给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。
逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。
输入格式
第一行包含整数n,表示数列的长度。
第二行包含 n 个整数,表示整个数列。
输出格式
输出一个整数,表示逆序对的个数。
数据范围
1≤n≤100000
问题分析
这个题可以用归并排序来写。每次把一个数组分成两个子数组,递归对两边的子数组进行排序,在递归处理排序时可以直接计算各自的逆序对。
关键代码
while (i <= mid && j <= r) {
if (a[i] <= a[j]) res[k ++] = a[i ++];
else {
res[k ++] = a[j ++];
cnt += mid - i + 1;
}
}
最后
以上就是兴奋跳跳糖为你收集整理的逆序对数(归并排序)逆序对数的全部内容,希望文章能够帮你解决逆序对数(归并排序)逆序对数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复