【发布时间】:2012-04-26 14:06:57
【问题描述】:
给定 3 个排序数组。从每个数组中找出 3 个元素,满足 a+b=c。可以做到小于 O(n^3) 的时间复杂度吗?请帮帮我。
【问题讨论】:
标签: algorithm search sorting data-structures time-complexity
给定 3 个排序数组。从每个数组中找出 3 个元素,满足 a+b=c。可以做到小于 O(n^3) 的时间复杂度吗?请帮帮我。
【问题讨论】:
标签: algorithm search sorting data-structures time-complexity
调用三个数组A、B和C,以及元素a、b和c。
在循环前两个数组的时候,因为如果a是固定的,b只能增加,c也只能增加。
因此,您不必每次拥有一对a 和b 时都循环遍历C;只需循环通过C,同时循环通过B 即可。
现在假设所有三个数组的长度都是O(N),时间复杂度是O(N^2),因为对于A中的每个值,你需要遍历所有B和所有@987654337 @,是 O(N) 的数字。
【讨论】:
通过遍历数组中的 2 个用于 a 和 b 并在第三个数组中对 c 进行二进制搜索,可以在 O(N^2 * logN) 复杂度内完成。
另一种方法是 O(N^2),将其中一个数组的元素插入散列,在其他两个数组中迭代 a 和 b,并查看散列中是否存在 c = (a + b) .
【讨论】: