当前位置: 首页 > 面试题库 >

找到三个总和为K的元素

阴焱
2023-03-14
问题内容

我写了以下内容以找到两个总和为K的元素

#include <iostream>
#include <unordered_map>

void sum_equal_to_k(int *a, int n, int k) { /* O(N) */
    std::unordered_map<int, int> hash;

    // insert all elements in a hash
    for (int i = 0; i < n; i++) {
        hash[a[i]] = 1;
    }

    // print if k - a[i] exists in the hash
    for (int i = 0; i < n; i++) {
        if (hash[k - a[i]] == 1) {
            printf("%d %d\n", a[i], k - a[i]);
        }
    }
}
int main() {
    int a[8] = {3, 5, 2, 1, 6, 7, 4};
    sum_equal_to_k(a, 8, 7);
    return 0;
}

我很难将其扩展为3个元素的总和


问题答案:

该问题称为3SUMO(n^2)您可以在此处找到一种解决该问题的算法,不需要任何哈希。

如果您只使用它会更简单vectorunordered_map无论如何您已经在使用,对吧?):

void sum3_k(std::vector<int> s, int k) {
    std::sort(s.begin(), s.end());

    for (size_t i = 0; i < s.size() - 2; ++i) {
        size_t start = i + 1;
        size_t end = s.size() - 1;

        while (start < end) {
            int sum = s[i] + s[start] + s[end];
            if (sum == k) {
                std::cout << s[i] << " " << s[start] << " " << s[end] << std::endl;
                ++start, --end;
            }
            else if (sum > k) {
                --end;
            }
            else {
                ++start;
            }
        }
    }
}


 类似资料:
  • 本文向大家介绍从Python中的元组列表中找到前K个频繁元素,包括了从Python中的元组列表中找到前K个频繁元素的使用技巧和注意事项,需要的朋友参考一下 我们有一个元组列表。在其中,我们需要找到前k个频繁元素。如果k为3,则需要从列表中的元组中找到前三个元素。 使用defaultdict 我们使用defaultdict将元素放入字典容器中。然后仅找出满足前k个条件的元素。 示例 输出结果 运行上

  • 给定一组未排序的整数,返回大小为k的所有子集(即每组有k个唯一元素),其总和为0。 所以我给了面试官以下解决方案(我在GeekViewpoint上研究过)。没有使用额外的空间,一切都做到位,等等。但当然成本是O(n^k)的高时间复杂度,其中在解决方案中。 但随后她提出了以下要求: 必须在答案中使用hashmap以降低时间复杂度 必须绝对地为一般情况提供时间复杂度 k=6时的提示,O(n^3) 她对

  • 给定一个大小为n的非递减数组a和一个整数k,如何找到数组a的一个子序列S,其元素的最大可能和,使得这个和最多为k。如果有多个这样的子序列,我们只想找到一个。 例如,让数组为{1,2,2,4},n=4,k=7。那么,答案应该是{1,2,4}。 蛮力方法大约需要O(n(2^n-1))但是有更有效的解决方案吗?

  • 我对C很在行,我正在尝试做一些黑客挑战,以此作为解决这个问题的方法 现在我正在努力解决愤怒的孩子们的问题:https://www.hackerrank.com/challenges/angry-children 基本上,它要求创建一个程序,给定一组N个整数,为该集合的K长度子集找到最小可能的“不公平”。不公平定义为K长度子集的最大值和最小值之间的差值。 我现在要做的是找到所有的K长度子集,计算它们

  • 这是一个面试问题。 在排序的行(但不是排序的列)和行之间没有关系的矩阵中查找第k个最小元素。(第一行和第n行之间没有关系——我们只知道每一行都是按升序排列的) 输入示例如下: 这种情况下的结果是 因为20是这个矩阵中第五小的元素。 我首先想到将所有元素添加到minHeap中,然后轮询元素,同时每次迭代从k中减去一个,直到我们得到答案。我还考虑为O(m*n)解决方案实现快速选择,尽管这些解决方案并没

  • 这是一个算法问题。如果我错过了Python中任何有帮助的现有函数,请大喊一声。 给定一组元素的,我们可以在Python中使用函数来找到所有唯一的k元素子集。让我们调用包含所有这些子集的集合。请注意,每个这样的子集都有不同的元素。 问题是两步走。首先,给定这些k-不同元素子集,我想组合(其中的一些),这样(组合只是一些子集的超集): > 构图中任意两个子集之间的交集为空 构图中所有子集的并集给出的正

  • 本文向大家介绍从三个链表中查找一个三元组,其总和等于C ++中的给定数字,包括了从三个链表中查找一个三元组,其总和等于C ++中的给定数字的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,该程序在链表中查找三元组,其总和等于给定的数字。 让我们看看解决问题的步骤。 为链表创建一个struct节点。 用伪数据创建链接列表。 为三个元素编写三个内部循环,这些循环将迭代直到链接列