【发布时间】:2019-03-13 10:41:09
【问题描述】:
有一点需要破解。我有算法的蛮力实现,这并不难,但显然我想要更有效的东西。
问题如下:
假设你有 n 个数组,每个数组都填充了 1 和 n 之间的一些值。我需要确定是否可以从每个数组中选择一个元素,以便我从 1 到 n 中选择每个元素恰好一次。一个小例子:假设n = 4 我们有这些n 数组:
[1,2,3,4]
[1,3]
[2,4]
[3,4]
这种数组组合将通过算法,因为可以(例如)从每个数组中分别选择 1、3、2、4。另一种可能性是 2、1、4、3。 一个反例是:
[1,2,3]
[3]
[3,4]
[3,4]
在这里您清楚地看到这些输入数组不会通过算法。不可能以每个元素被选择一次的方式从每个数组中选择 1 个元素。
正如我所说,蛮力方法并没有那么复杂,但我想要更有效的方法,无需遍历所有可能的排列,直到找到符合标准的排列。
【问题讨论】:
-
你用什么语言编程?最好用适当的语言标记您的问题,以便您获得更有针对性的帮助!
-
怎么样,至于“更简单”的实现,也是蛮力,一个简单的二叉树。第一个
n/2将由应该通过测试的输入的一半检查,另一半由另一半输入!只是一个建议! -
几个问题:1- 数字总是在这个范围内
1 <= x <= n? 2- 数组是否排序? -
@M.kazemAkhgary 是的,是的。因此,如果我们有 3 个数组,则每个数组中可能包含的数字始终是 1、2、3。 5个数组?总共有 1,2,3,4,5。是的,它们将在数组中排序。
-
@M.kazemAkhgary:还是蛮力的……对于每个数组中的每个数字组合,我必须计算它们在所有数组中出现的次数。想象一下 8 个数组,每个数组都充满了数字。我将不得不选择 2 个数字的每个组合、3 个数字的每个组合、4 个数字的每个组合等等。效率不高。