给定4个未排序的数组,找到总和<m

时间:2018-08-24 16:59:37

标签: arrays algorithm sorting

=“”

给出所有可能的四倍数组,它们没有排序且长度相同,它们具有唯一性其中的元素,但在整个数组中的元素可能会发生冲突,因此要求我们从每个数组中选择一个元素并满足此条件“ x1 + x2 + x3 + x4

我们能做些比对所有数组排序并以O(n ^ 3 * logn)更好的事情吗?

1 个答案:

答案 0 :(得分:2)

  1. 生成一个数组,其中包含x1和x2中元素之间的所有和。这将具有O(n ^ 2)个元素。让我们称之为arr0
  2. 对x3和x4执行相同的操作。让我们称之为arr1
  3. 对两者进行排序
  4. 现在,我们已经减少了问题,可以从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)来对四倍进行计数。