【发布时间】:2012-07-16 06:34:35
【问题描述】:
给你n 数字,你必须找到对数,这样它们之间至少有一个数字是共同的。
例如。对于 5 个数字:
2837 2818 654 35 931
答案:6
这里的对是(2837,2818), (2837,35), (2837,931), (2818,931), (654,35), (35,931)
我的尝试:我采用了一个结构,该结构存储十进制数字、数组中数字形式的数字以及该数字中的位数。。 p>
现在对于每个数字,我散列数组中包含索引 0-9 的数字,并检查所有以下数字是否已经存在任何数字。 p>
我的尝试是O(n^2),速度很慢。有没有其他算法会更快?
【问题讨论】:
-
您对一个值进行了哈希处理,但未能使用哈希表查找?
-
我的解决方案工作正常,但是当 n 很大时花费了很多时间
-
这不能比 O(n^2) 更快,因为您至少需要 O(n^2) 才能在最坏的情况下生成答案。
-
@GrigorGevorgyan - 我假设问题中示例的答案只是
6。您不必列出所有对。 -
@JirkaHanika 是的,你是正确的配对被显示为更多和更清晰的解释,只需要计数作为答案,即使有问题,它也粗体写为“配对数”。
标签: algorithm