这是一个家庭作业。
目标是用伪代码提供一种算法,该算法将搜索数字数组(不指定整数或 > 0)并检查任何两个数字的比率是否等于给定的 x。时间复杂度必须低于 O(nlogn)。
我的想法是对数组进行归并排序(O(nlogn) 时间),然后如果 |x| > 1 开始按降序检查每个数字(使用二进制遍历算法)。检查每个数字也应该花费 O(logn) 时间,最坏的情况是 n 次检查总共需要 O(nlogn)。如果我没有遗漏任何东西,这应该给我们一个 O(nlogn) + O(nlogn) = O(nlogn) 的最坏情况,在分配的参数内。
我意识到排序后从哪里开始检查比率并不重要,但时间成本按 1/2 摊销)。
我的逻辑正确吗?有更快的算法吗?
一个例子,以防不清楚:
给定一个数组 { 4, 9, 2, 1, 8, 6 }
如果我们要搜索比率为 2:
合并排序 { 9, 8, 6, 4, 2, 1 }
由于给定的比率 >1,我们将从左到右搜索。
2a. 第一个数字是 9。检查 9 / 4 > 2。检查 9/6 < 2 下一个数字。2b。第二个数字是 8。检查 8 / 4 = 2。完成