【问题标题】:Find 3 numbers a, b, c each from 3 arrays that sum to a given number T?从总和为给定数字 T 的 3 个数组中找到 3 个数字 a、b、c?
【发布时间】:2015-03-26 20:18:55
【问题描述】:

这是一个面试问题,所需的复杂度是 O(nlogn)。我已经实现了一个 O(n^2 logn) 的解决方案。 鉴于解决方案存在。 也请提供您的解决方案的伪代码。 谢谢。

我的 O(n^2 logn) 解决方案的代码片段:

triplet SumOf3(vector<int> A, vector<int> B, vector<int> C, int T)
{
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    sort(C.begin(), C.end());
    for (int i = 0; i < A.size(), ++i) {
        for (int j = 0; j < B.size(); ++j) {
            int s = A[i] + B[j];
            int ind = int(lower_bound(C, C + C.size(), T - s) - C.begin());
            if (s + C[ind] == T) {
                triplet ans;
                ans.a = A[i];
                ans,b = B[j];
                ans.c = C[ind];
                return ans;
            }
        }
    }
}

【问题讨论】:

  • 你错了。这不是采访。这是关于组合微积分的考试。
  • if(Arrays.binarySearch(C, num - sum) > 0) { 中的“num”是什么
  • 我认为你是对的。
  • @SariRahal,num 是 T。我的错误。已编辑。
  • 注意:可以假设数组已排序,如果不是,则对它们进行排序是 O(n * log2 n)。

标签: c algorithm sorting sum binary-search


【解决方案1】:

如果函数返回一个布尔值或三个数字,我不明白你的问题。 我认为应该嵌套 3 个 for 循环,为什么要在数组 C 中搜索数字 T。 您只需要查看总和是否等于数字 T 以及 C 中的另一件事,我们没有像 .length 这样的东西。 这是一个例子:

int temp;
for(int i = 0;i<A.length;i++)
  for(int j = 0;j<B.length;j++)
    for(int k = 0;k<C.length;k++)
        temp = A[i]+B[j]+C[k];
        if(temp==T)
        return true;
return false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多