HDU 1394题意:
给一个由0~n-1组成的序列,求出该序列的所有循环同构序列中的最小逆序对数目,逆序对的两个元素可以不相邻。
思路:这题据说可以直接暴力O(n2)O(n^2)可以水过。。
说一下线段树做法O(nlogn)O(n\log n):
以这个序列来说明:
1,9,2,3,0,8,5,7,4,61 ,9 ,2, 3, 0, 8, 5, 7 ,4 ,6我们先假设有一个长度为n元素...
分类:
其他好文 时间:
2015-08-18 06:35:18
阅读次数:
123
对1~n组成的序列进行冒泡排序,一共进行了k趟,问有几个符合题意的序列。
注意:这里指每一趟是指交换当前相邻的所有逆序对,例如:2 1 4 3进行一趟交换就是1 2 3 4
如果我们细心观察,就会发现,需要进行的趟数等于序列中对于某个最多逆序对数的数。例如:在序列 3 2 1 4中,3的逆序对为0,2的逆序对为1,1的逆序对为2...
分类:
其他好文 时间:
2015-08-17 23:47:43
阅读次数:
172
题意:求一个数列的冒泡排序的交换次数;参考:http://blog.csdn.net/suwei19870312/article/details/5293694思路: 一个数列的冒泡排序交换次数即为每个数对应的逆序对数之和,朴素的思想是两个for,O(N^2)复杂度; 数字范围是0-9999...
分类:
编程语言 时间:
2015-08-14 13:21:55
阅读次数:
123
#include using namespace std;const int LENGTH = 100;int temp[LENGTH];int count = 0;void Merge(int array[], int low, int mid, int high);void MergeSort(...
分类:
编程语言 时间:
2015-08-13 22:06:40
阅读次数:
179
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。思路:归并排序的合并过程。主要是考虑合并两个有序序列时,计算逆序对数。对于两个升序序列,设置两个下标:两个有序序列的末尾。每次比较两个末尾值,如果前末尾大于后末尾值,则有...
分类:
编程语言 时间:
2015-08-13 17:28:49
阅读次数:
194
题意:给定一个序列,然后将此序列按升序排列,每次操作只能交换相邻的两个数,求达到目标所需的最小交换次数;(ps:此题需用 long long ,否则会wa)当然这其实就是求逆序对数;归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是...
分类:
编程语言 时间:
2015-08-07 22:05:23
阅读次数:
205
已用此模板过掉了好几题。#include#define LL long long //以后可以考虑这样写 简洁int n,i,a[500010], b[500010];//需要开辟两个数组LL count(int l,int r)//统计[l ,r]的逆序对数{ LL s=0;//初始化 ...
分类:
编程语言 时间:
2015-08-05 12:38:07
阅读次数:
144
归并排序(求逆序数)归并排序:递归+合并+排序时间复杂度:O(n logn)空间复杂度:O(n)用途:1.排序 2.求逆序对数DescriptionIn this problem, you have to analyze a particular sorting algorithm. The alg...
分类:
编程语言 时间:
2015-08-04 22:20:25
阅读次数:
113
题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
解题思路
思路一:暴力搜索,一次判断每一个数,其之后的数有没有比它小的,若有则计数加一。时间O(n^2)
思路二:利用归并排序方法,在归并的时候,计算逆序对数目。具体过程看代码。 时间O(nlogn)
实现代码
...
分类:
编程语言 时间:
2015-07-31 13:09:58
阅读次数:
158