给出3个排序数组。找到3个元素,每个数组一个,使得a + b = c。可以做到小于O(n ^ 3)时间复杂度吗?请帮帮我。
答案 0 :(得分:4)
调用三个数组A
,B
和C
以及元素a
,b
和c
。
在循环前两个数组时,因为如果a
被修复,b
只会增加,c
也只能增加。
因此,每次有C
和a
时,您都不必遍历b
;只需循环C
,而B
循环即可。
现在假设所有三个数组的长度为O(N),时间复杂度为O(N ^ 2),因为对于A
中的每个值,您需要遍历所有B
和所有C
,数字为O(N)。
答案 1 :(得分:2)
通过在a和b中迭代2个数组并在第三个数组中迭代搜索c,可以在O(N ^ 2 * logN)复杂度中完成。
另一种方法是O(N ^ 2),方法是将其中一个数组的元素插入哈希,迭代另外两个数组中的a和b,然后查看哈希中是否存在c =(a + b)