给出所有可能的四倍数组,它们没有排序且长度相同,它们具有唯一性其中的元素,但在整个数组中的元素可能会发生冲突,因此要求我们从每个数组中选择一个元素并满足此条件“ x1 + x2 + x3 + x4
我们能做些比对所有数组排序并以O(n ^ 3 * logn)更好的事情吗?
答案 0 :(得分:2)
现在,我们已经减少了问题,可以从2个排序的数组中找到元素之间的总和p0 = 0
p1 = arr1.length - 1
qty = 0
while(p0 != p1)
while(p1 >= 0 and arr0[p0] + arr1[p1] >= m) p1--;
if (p1 <= p0) break;
qty += p1
po++
这种小算法可以解决O(length(arr0)+ length(arr1))中的问题,因为p1指针总是减少而p0总是增加,并且对于每个循环,我们总是增加或减少其中之一
总体而言,这给了我们O(n ^ 2)来生成对,O(n ^ 2 * log n ^ 2)来对它们进行排序,O(n ^ 2)来对四倍进行计数。