当前位置: 首页 > 知识库问答 >
问题:

列表中对的总和:记忆、设计优化

阴高刚
2023-03-14

从一个整数列表和一个和值中,我必须按照外观的顺序返回前两个值,然后相加为和。任务的来源

我觉得最优化的扫单方式是:

  1. index 0, index 1
    
    index 0,          index 2
    
             index 1, index 2
    
    index 0,                   index 3
    
            index 1,           index 3
    
                      index 2, index 3
    

    等等。到目前为止我说的对吗?

    然后,我使用了记忆法来削减出现两次以上的数字。

    我编写的代码是实用的,但在更高级的测试中会超时。这里是:

    def sum_pairs(ints, s):
    d={}
    n2_index = 0
    d[ints[0]] = 1
    while True:
        n2_index += 1
        if ints[n2_index] not in d.keys():
            d[ints[n2_index]] = 0
            
        if d[ints[n2_index]] == 2:
            if n2_index == len(ints)-1:
                return None
            continue
        for n1_index in range (0, n2_index):
    
            if ints[n1_index] + ints[n2_index] == s:
                return [ints[n1_index], ints[n2_index]]
        
        d[ints[n2_index]] += 1
        
        if n2_index == len(ints)-1:
            return None
    

    如果您能帮助我理解我的错误和如何处理这类任务,我将不胜感激。干杯!

共有1个答案

方安怡
2023-03-14

这样做的方法是记住所有你以前见过的数字。这通常是在集合中完成的,集合给你O(1)(常量)查找时间,所以你可以很快地确定你是否已经看到了一个特定的数字。

通过列表,您可以查看您的集合,看看是否看到了sum-current_value。如果是,则可以输出这两个值,如果不是,则将current_value添加到集合中并继续。

def sum(ints, s):
    seen = set()
    for current_value in ints:
        if s - current_value in seen:
             return s-current_value, current_value
        else:
             seen.add(current_value)
    return None
 类似资料:
  • 我试图计算每列CSV的总和。我能够读取csv在js使用readfile方法。我也能够循环使用它,并将数据解析成对象数组。现在我只是想出一种方法来把所有的列元素加起来,这就是我正在努力的地方。我的csv对象是对象格式的数组,看起来像这样。 CSV输入如下所示: 我想补充18 19 20最终答案应该是这样的[57,518]。 到目前为止,我已经完成了这些工作,我只需要帮助来改进这一点,并在JS中按列添

  • 本文向大家介绍F# 计算列表中数字的总和,包括了F# 计算列表中数字的总和的使用技巧和注意事项,需要的朋友参考一下 示例 通过递归 上面的例子表示:“看list,它是空返回0,否则它是一个非空列表所以它可能是?。 [1],[1; 2][1; 2; 3]等,如果list是[1]然后将其绑定变量head到1并tail以[]再执行head + sumTotal tail。 执行示例: 封装上述模式的更通

  • 问题内容: 最近在一次采访中我遇到了编程问题。 有2个链接列表。每个节点存储一个从1到9的值(指示数字的一个索引)。因此123将是链表1-> 2-> 3 任务是创建一个函数: 这将返回2个链表争论中的值之和。 如果数组a为:1-> 2-> 3-> 4 数组b为:5-> 6-> 7-> 8 答案应该是:6-> 9-> 1-> 2 这是我的算法: 遍历a和b中的每个节点,获取作为整数的值并将其相加。使

  • 问题内容: 我有一个程序可以通过递归传递大量数据,例如1000个变量。递归将至少运行50或60次。我担心的是,由于没有足够的空间,是否有可能数据在内存位置上被覆盖,或者如果没有内存,那么我会得到一些例外,即程序内存已经用完(我没有收到这样的错误)? 是否存在错误的解决方案,因为该程序没有更多的内存并且在现有位置上被覆盖? 问题答案: 涉及两个存储区域:堆栈和堆。堆栈是保存方法调用的当前 状态 (即

  • 问题内容: 让 假设我要对列表中每个列表的索引元素求和,例如在矩阵列中添加数字以获得单个列表。我假设数据中的所有列表的长度均相等。 如何遍历列表列表而不会出现索引超出范围错误?也许lambda?谢谢! 问题答案: 您可以尝试以下方法: 这里使用的组合和解压的列表,然后根据自己的索引压缩的项目。然后,您可以使用列表推导来遍历相似索引的组,对其进行求和并返回其“原始”位置。 为了更清楚一点,下面是迭代

  • 我有一堂课如下 如果我有一个列表作为