gpt4 book ai didi

arrays - 给定 4 个数组,未排序,找到所有可能的四元组,其总和
转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:10 24 4
gpt4 key购买 nike

给定四个未排序的等长数组,它们中有唯一的元素,但跨数组的元素可能会发生冲突,因此我们被要求从每个数组中选择一个元素并满足此条件“x1+x2+x3+x4 < m"并计算所有可能的解决方案。

我们能否做一些比对所有数组排序并在 O(n^3*logn) 中完成更好的事情?

最佳答案

  1. 生成一个数组,其中包含 x1 和 x2 中元素之间的所有总和。这将有 O(n^2) 个元素。让我们称它为 arr0
  2. 对 x3 和 x4 做同样的事情。让我们称它为 arr1
  3. 对两者进行排序
  4. 现在我们已将问题简化为查找 2 个排序数组中元素之间的总和 < m 的数量。

    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) 来计算四元组。

关于arrays - 给定 4 个数组,未排序,找到所有可能的四元组,其总和 <m,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52008872/

24 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com