我想检查哪种策略最有效地计算下面描述的问题
我有一套Q和两个子集L和R.我有三个案例。
1)L∩R!= 0.在这种情况下,我想得到重叠元素的数组。在下面的示例中,结果集将是R = {4,5}。
Q = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
L = {0, 1, 2, 3, 4, 5, *, *, *, *}
R = {*, *, *, *, 4, 5, 6, 7, 8, 9}
2)L∩R= 0.在这种情况下,我想得到Q \(L∪R)。在下面的示例中,结果集将是R = {4,5,6}。
Q = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
L = {0, 1, 2, 3, *, *, *, *, *, *}
R = {*, *, *, *, *, *, *, 7, 8, 9}
3)Q \(L∪R)= 0.在这种情况下,我想得到他们找到对方的索引。在下面的示例中,索引将为4。
Q = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
L = {0, 1, 2, 3, 4, *, *, *, *, *}
R = {*, *, *, *, *, 5, 6, 7, 8, 9}
答案 0 :(得分:1)
如果L ∩ R != 0
,那么我会:
选择两个最小的数组,并比较它们以找到共同的元素。
这将为你节省一个循环,它将导致O(n 2 ),而不是天真的O(n 3 )。
在另一种情况下,我看不出你将如何避免访问每个数组的每个元素。
注意:如果您使用数据结构,请使用哈希映射,这两种情况都将以线性时间进行分析。