给定3个排序数组。从每个数组中找出 3 个元素,满足 a+b=c。可以做到小于 O(n^3) 的时间复杂度吗?请帮我。
问问题
256 次
2 回答
4
调用三个数组A
,B
和C
, 和元素a
,b
和c
。
在循环前两个数组时,由于ifa
是固定的,b
只能增加,c
也只能增加。
因此,您不必C
每次有一对a
and时都要循环b
;只是循环,C
虽然循环B
会做。
现在假设所有三个数组的长度都是 O(N),时间复杂度是 O(N^2),因为对于 中的每个值A
,你需要遍历所有的B
和所有的C
,这个数字是 O(N)。
于 2012-04-26T14:13:46.940 回答
2
它可以在 O(N^2 * logN) 复杂度中完成,方法是遍历 2 个数组的 a 和 b 并在第三个数组中对 c 进行二进制搜索。
另一种方法是 O(N^2),通过将其中一个数组的元素插入散列,在其他两个数组中迭代 a 和 b 并查看散列中是否存在 c = (a + b)。
于 2012-04-26T14:11:15.543 回答