我需要补充说每个数组中有n个整数,每个整数介于0和n ^ 5之间。有没有办法在线性时间算法中解决这个问题?
答案 0 :(得分:2)
是的,在这些假设下,线性时间是可能的:
1)将其中一个数组转换为哈希集,其查找时间复杂度约为O(1)。哈希集的构造大约需要线性时间。
2)迭代另一个数组,对于每个元素i,检查x-i是否在哈希集中。如果有匹配则(i,x - i)是一个解决方案。此步骤需要线性时间。
答案 1 :(得分:0)
我想不出线性时间算法,但我可以想到一个O(m log n)解决方案,其中m是较大列表的长度,n是较小列表的长度。
设n为较小列表的长度,m为较大列表的长度。
步骤1:对较小的列表进行排序(例如,合并排序):O(n log n) 步骤2:对于较大列表中的每个项目,尝试在排序列表中查找(目标号码 - 项目)。 如果找到匹配项,则表示您找到了要查找的两个数字。 O(m log n)。
复杂度为O(n log n)+ O(m log n),即O(m log n),因为m是较大的列表。