考虑一组有 n 个瓶子的 A 和一组有 n 个盖子的 B,这样 A 中的每个瓶子在 B 中都有唯一的盖子。但是 A 中的瓶子和 B 中的盖子看起来都一样。可以进行的唯一比较是 A 中的瓶子和 B 中的瓶盖配对 (a,b),并测试 a 的螺纹是否更小、更大或与 b 的螺纹完美。
给出一个有效的算法来匹配所有瓶子和它们的盖子。
PS:这似乎我没有做任何事情来获得解决方案,相信我,我做到了。请给我一个答案。
考虑一组有 n 个瓶子的 A 和一组有 n 个盖子的 B,这样 A 中的每个瓶子在 B 中都有唯一的盖子。但是 A 中的瓶子和 B 中的盖子看起来都一样。可以进行的唯一比较是 A 中的瓶子和 B 中的瓶盖配对 (a,b),并测试 a 的螺纹是否更小、更大或与 b 的螺纹完美。
给出一个有效的算法来匹配所有瓶子和它们的盖子。
PS:这似乎我没有做任何事情来获得解决方案,相信我,我做到了。请给我一个答案。
不错的问题,但正如在它似乎是家庭作业之前指出的那样,为什么你不尝试这样的事情:
你应该为每个瓶子循环(没有任何逻辑顺序)你应该有一种结构的盖子,它是一个动态排序的盖子集合数组,这个数组被初始化只有一个元素(即集合 B)。
并且对于每个瓶子,当您获得“潜在”的一组瓶盖时,您应该使用二进制搜索在您的阵列中旅行,您逐个检查瓶盖
编辑:我已经看到发布的评论,实际上它是从 两组项目中重复的。集合 A 的每个元素在集合 B 中唯一匹配。在 O(nlogn) 时间内将集合 A 的每个项目与集合 B 中的项目匹配 ,解决方案在这里解释 http://www.wisdom.weizmann.ac.il/~ naor/PUZZLES/nuts_solution.html
和我的很相似,但瓶子也可以隔开。