我有以下两个集合。找到每个集合中的一个坐标,使它们的和至少为H,最佳方法是什么。
A = {(x1,y1), (x2,y2),....(xn,yn)}
B = {(p1,q1), (p2,q2),....(pn,qn)}
如果答案是(x1,y1)和(p1,q1),那么它应该满足 x1+p1>=H 和 y1+q1>=H。我需要找出所有这样的坐标(仅计算数量)。
例如:
A = {(2,3), (1,6), (5,2), (10,1)}
B = {(5,6), (8,4), (3,5), (1,9), (7,7)}
H = 8
Answer: 7
Explanation:
{
{(1,6),(8,4)},
{(1,6),(7,7)},
{(2,3),(7,7)},
{(5,2),(5,6)},
{(5,2),(7,7)},
{(10,1),(1,9)},
{(10,1),(7,7)}
}
暴力方法:我可以使用两个for循环来遍历两个集合A和B的所有组合。但这是一个O(N^2)的解决方案。
我知道另一种技术,可以在x坐标上对B进行排序。因此,从A中,我可以选择每个x坐标,并在B中检查H-x,识别H-x可以在长n时间内完成,但从那里我需要逐一计数以检查y坐标是否符合条件。
是否有更好的解决方案?