所以,澄清问题:
设置A和设置B.
集合A中的每个元素在集合B中都有一个伙伴
你不能基于将它与同一组的成员进行比较来对任何一组进行排序,即B的每个b元素与集合B的任何其他b(同样对于A)无法区分。
当Ai与Bi匹配时,您可以判断Bi > Ai
,Bi < Ai
或Bi = Ai
。
设计一个运行时间为O(nlogn)的算法。
二次时间的明显答案是微不足道的,没有帮助 - 虽然这是我提出的最好的答案。 log(n)让我觉得我应该使用递归或某种二叉树,但我不确定如何创建二叉树而不能比较来自同一组的元素。另外,我不知道如何使用递归调用来获得比仅运行嵌套for循环更大的效果。任何提示将非常感谢。
答案 0 :(得分:9)
你没有说清楚,但你的问题看起来很像Matching Nuts and Bolts问题。
这个想法是选择一个随机螺母a,找到匹配的螺栓b。使用螺母a对螺栓进行分区,然后使用螺栓b对螺母进行分区,然后像快速排序一样递归。
(当然,我们谈论的是nlogn的平均情况,而不是最坏的情况)。