面试问题:使夫妻坐在一起的最小交换次数

问题描述 投票:-1回答:2

这是一个面试问题,问题描述如下:

[n对夫妇连续坐着2n个座位。找到最小的交换次数,使每个人都可以坐在他/她的伴侣旁边。例如,0和1是一对,而2和3是一对。最初,他们按以下顺序排成一列:[2,0,1,3]。最小交换数为1,例如,将2与1交换。

我知道这个问题有一个贪婪的解决方案。您只需要从左到右扫描阵列。每次看到不匹配的对时,都将对中的第一个人换到他/她的正确位置。例如,在上面的对[2,0]的示例中,您将直接将2与1交换。无需尝试将0与3交换。

但是我不太明白为什么会这样。我看到的证据之一是这样的:

考虑一个简单的例子:7 1 4 6 2 3 0 5.第一步,我们有两个选择来匹配第一对:将7换为0,或将1换为6,然后得到0 1 4 6 2 3 7 5或7 6 4 1 2 3 0 5.请注意,第一对夫妇已不再计数。对于后一部分,它由4 X 2 3 Y 5(X = 6 Y = 7或X = 1 Y = 0)组成。由于不同的夫妻无关,所以我们不在乎X Y是6 7对还是0 1对。它们是等效的!因此,这意味着我们的选择不重要。

我认为这是非常合理的,但还不够令人信服。我认为我们必须证明X和Y在所有可能的情况下都是一对,并且不知道怎么做。谁能给个提示?谢谢!

这是一个采访问题,问题描述如下:有n对夫妇并排坐着2n个座位。求出最小交换数,以使每个人都坐在他/她的旁边...

algorithm greedy
2个回答
0
投票

因此最大交换数为n-1。一次交换可以将2对夫妇放在一起,没有什么比这更好的了。因此,交换的最小数量为n / 2或(n + 1)/ 2(我还没有计算出奇数n会发生什么)。最小和最大之间是否存在情况?如果存在不相交的夫妻子集-一对中的每个人都坐在子集中其他人的同伴旁边-那么可以单独处理该子集,每个子​​集最多进行m-1次交换(其中m是子集中的对数)。


0
投票

我将交换每个even个定位的成员,如果他/她没有坐在伴侣旁边。

© www.soinside.com 2019 - 2024. All rights reserved.