|
|
1
7
如果我们将两种排列组合在一起,当每种排列具有相同的奇偶性时,结果将具有偶数奇偶性,而当它们具有不同的奇偶性时,结果将具有奇数奇偶性。所以如果我们解决了这个问题 奇偶问题 比较两种不同的排列很简单。 对等 可以如下确定:选择任意元素,找到排列移动到的位置,重复,直到回到开始的位置。现在您已经找到了一个循环:排列将所有这些元素旋转一个位置。您需要一次小于循环中元素数的交换才能撤消它。现在,选择另一个尚未处理的元素,并重复,直到看到每个元素为止。请注意,每个元素总共需要一次交换,减去每个周期需要一次交换。 时间复杂度是置换大小的O(N)。注意,尽管我们在循环中有一个循环,但内部循环只能对置换中的任何元素迭代一次。
另外,为了好玩,这里有一个基于维基百科定义的奇偶校验函数的效率低得多但短得多的实现(偶数返回True,奇数返回False):
|
|
|
2
6
给你
|
|
|
3
5
上一个答案的一个次要变体-复制perm1并保存数组查找。
|
|
|
4
4
我天真的解决方案:
|
|
|
5
2
这里有一些轻微的重构 Weeble's answer :
|
|
|
6
2
这是调试版本:
唯一的区别是字典中的交换没有正确进行。 |
|
|
7
0
我的直觉告诉我,仅仅计算两种排列之间的差异,就可以得到一种,比从一种排列到另一种排列所需的互换数量还要多。这反过来会给你一个平价。 这意味着您根本不需要在代码中进行交换。 例如:
有三种不同,因此需要两种互换将一种互换为另一种互换,因此甚至可以实现平价。 另一个:
有四种不同,因此有三种互换,因此有奇数平价。 |
|
|
8
0
|