【发布时间】:2019-02-28 06:09:23
【问题描述】:
首先,这不是作业或类似的东西,这是我上一个问题Candidate in finding majority element in an array的提示性问题。
有n种类的对象O1, O2, ..., On,并且有一个数组F[1...n],F[i]是Oi的个数(即有F[i]Ois,数组F[1...n]是给定的),每个F[i] > 0 .
现在使用以下规则来配对对象:
如果i != j,Oi可以和Oj配对,
else if i == j, Oi 不能与 Oj 配对。
也就是说,只有两种不同类型的对象可以相互配对。
输入数组
F[1...n]是否存在有效的配对方法?给出一个时间复杂度最好的算法来判断真假并证明其正确性。如果存在,则输出一个有效的配对序列。给出你的算法和时间/空间复杂度分析。
例如,
输入 F[] = {10, 2, 4, 4};
那么至少存在一种有效的配对方式:
2 O1s 和 2 O2s 配对,4 O1s 和 4 O3 s 配对,4 O1s 和 4 O4s 配对。
一个有效的配对顺序是:
(1,2) (1,2) (1,3) (1,3) (1,3) (1,3) (1,4) (1,4) (1,4) (1 ,4)
【问题讨论】:
-
您在比较索引 - 对吗?
-
对不起,数组从哪里来的?
-
@KyleStrand 你不需要计算数组,数组是给定的。数组
F[]是算法的输入。 -
我的意思是“数组与问题有什么关系”,但您的第一次编辑澄清了它。
-
@KyleStrand 我重新编辑了问题并给出了一个例子。