统计数组的逆序对
来源:互联网 发布:通过网线共享网络 编辑:程序博客网 时间:2024/05/18 02:38
题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
题目代码
思路:这个最简单的当然是直接统计了,算法时间复杂度为n^2,冒泡排序都可以。如果想进一步减少时间复杂度的话,可以考虑用递归的方法,比如使用归并排序。
下面贴代码。
int merge(int A[], int start, int mid, int end) { int[] aux = new int[end - start + 1]; int i = start; int j = mid + 1; int k = 0; int reverse = 0; while (i <= mid && j <= end) { if (A[i] <= A[j]) { aux[k++] = A[i++]; } else { reverse += mid - i + 1; aux[k++] = A[j++]; } } while (i <= mid) { aux[k++] = A[i++]; } while (j <= end) { aux[k++] = A[j++]; } for (int m = 0; m < aux.length; ++m) { A[start + m] = aux[m]; } return reverse; } int count(int A[], int start, int end) { if (end <= start) { return 0; } int mid = (start + end) >> 1; int count1 = count(A, start, mid); int count2 = count(A, mid + 1, end); return count1 + count2 + merge(A, start, mid, end); }
0 0
- 统计数组的逆序对
- 统计数组中的逆序对的数量
- 统计数组中的逆序对
- 数组中逆序对统计方法
- 树状数组入门—逆序对统计
- 找到数组的逆序对
- 求数组的逆序对
- 动态统计逆序对 (树状数组 twopointer)
- 11087 统计逆序对
- 统计逆序对
- 求解数组中逆序对的对数
- 求数组中逆序对的个数
- 求数组的逆序对个数
- 求数组中逆序对的个数
- 数组中出现的逆序对
- 归并排序之数组的逆序对
- 【算法】数组中的逆序对的总数
- 逆序对的求法(树状数组)
- UVA 10054
- 请求转发与请求重定向区别(实例)
- android 学习方法_总结
- Hive运行架构及配置部署
- linux网络命令 traceroute
- 统计数组的逆序对
- 张正友相机标定文章:A Flexible New Technique for Camera Calibration
- eclipse安装svn插件
- Android学习之路------github上的常用Android特效
- prim算法+优化 模版
- Reconstruct Itinerary
- Swift简单实现URL生成二维码,并保存到本地相册
- 约瑟夫问题
- MQ--为什么使用它?