这是一个面试问题,问题描述如下:
[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个座位。求出最小交换数,以使每个人都坐在他/她的旁边...
因此最大交换数为n-1。一次交换可以将2对夫妇放在一起,没有什么比这更好的了。因此,交换的最小数量为n / 2或(n + 1)/ 2(我还没有计算出奇数n会发生什么)。最小和最大之间是否存在情况?如果存在不相交的夫妻子集-一对中的每个人都坐在子集中其他人的同伴旁边-那么可以单独处理该子集,每个子集最多进行m-1次交换(其中m是子集中的对数)。
我将交换每个even
个定位的成员,如果他/她没有坐在伴侣旁边。