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

如果给定的数字是列表中存在的两个不同数字的总和,如何返回True?

公胤运
2023-03-14

有人能告诉我下面的解决方案是否可能“一次性”实现吗?

给定一个数字列表和一个数字k返回列表中的任意两个数字加起来是否等于k

例如,给定17的[10,15,3,7]k,返回True,因为10717

奖励:你能一次完成吗?

def verify(list):
    for i in range(len(list)):
        j = k - list[i]
        if j in list:
            return True
    return False

共有3个答案

喻昀
2023-03-14

我想出了两个解决方案。

第一个,我很确定是你被要求的,做所有可能的总和——最坏的情况——只有一次通过:

def verify_2(l,k):
    i = 0
    j = 0
    n = len(l)
    while i < n - 1:
        j = i + 1
        while j < n:
            if l[i] + l[j] == k:
                return True
            j = j + 1
        i = i + 1
    return False


print(verify_2(l = [10,15,3,7], k = 17)) #RETURNS TRUE
print(verify_2(l = [10,15,3,7], k = 6)) #RETURNS FALSE

另一个效率较低(因为它必须对向量firt进行排序,它至少已经具有n*log(n)复杂性),并且您必须手动执行另一个过程。这不是你想要的,但因为更容易理解,我也把它留给你:

def verify(l,k):
    l.sort()
    for i in range(len(l) - 1):
        if l[i] + l[i+1] == k:
            return True
    return False

print(verify(l = [10,15,3,7], k = 17)) #RETURNS TRUE
print(verify(l = [10,15,3,7], k = 6)) #RETURNS FALSE

第一种解决方案比第二种快得多。

关于你的解决方案,我必须告诉你几件事。避免在变量或参数中使用“list”这个词,因为它是Python语言中的一个词,用于将另一个数据类型转换为数据类型“list”(即,如果你有s=“hello”,并且你做了s=list,那么你就会得到s有['h'、'e'、'l'、'l'、'o']。还要记住,函数头下面的所有代码(def…)需要缩进,可以是四个空格、两个空格或一个制表符(否则会出现解释错误)。您还应该注意,在您的解决方案中使用了k,但它不是一个定义的变量;您应该将其作为参数传递或在函数内部定义,否则无法使用它(建议使用前者,而不是后者)。即使考虑到这一点,您的函数也没有执行文本中要求的操作:它实际上在for循环的每一步从k中减去第i个元素,并在每次迭代中检查减法的结果是否属于列表。

姜飞飙
2023-03-14

抱歉,伙计们,我发现很难找到你建议的线索的答案,而且解决方案大多是Java。。你能看看另一个提议吗:首先我们创建一份我们的清单。。

def verify(l, K):
   for i in range(len(l)):
       j = k - l[i]
       if j in l:
           return True
       l = l.pop([i])
   return False

非常感谢。

经正祥
2023-03-14

使用itertools组合来获取列表中所有可能的数字对。

from itertools import combinations
li =[10, 15, 3, 7]
k =17

answer = k in (map(sum,combinations(li,2)))

print(answer)
 类似资料:
  • 这个问题是在谷歌编程采访中提出的。我想到了两种方法: > 找出长度的所有子序列。这样做时,计算两个元素的和,并检查它是否等于k。如果是,请打印“是”,否则继续搜索。这是一种暴力手段。 按非降序排列数组。然后从数组的右端开始遍历数组。假设我们有一个排序数组,{3,5,7,10},我们希望总和是17。我们将从元素10开始,索引=3,让我们用“j”来表示索引。然后包含当前元素并计算所需的_sum=sum

  • 假设我在两个不同的数据库 数据库中的< code>static表具有如下列: < code>apartments数据库中的< code>static表具有如下列: 我想在不引发任何错误的情况下运行下面的查询。目前,我得到错误,因为列不存在于中。 我尝试的解决方案: 它有效,但是当涉及更多列时,此查询会变得混乱。 我在寻找什么: > < li> 创建一个函数,该函数采用列名和表名,然后执行我在上述查

  • 我试图确定数组列表中的数字是否可以被antoher数组列表中的所有数字整除。我下面的代码输出列表中的所有数字,这些数字可以被中的任何除数整除。我想输出列表中所有除数都可以整除的值,而不是它们中的任何一个。例如,如果我有listdiv=[1,2,3,,5,8]和listdivisor=[2,4]。预期的输出应该是8,但此代码输出2和8。 非常感谢。我们将非常感谢您的努力!

  • 假设我有从文件中读取的字符串和整数,并用逗号分隔,我想将它们添加到两个不同的 arrayList 中。 汉堡包,15 奶酪,10 苏打水,15 我该怎么做呢?我最初使用nextLine()将它们添加到一个数组列表中并提取整数并擦除逗号,但这对数组列表不起作用。我还尝试使用nextInt()来获取int,但出现了异常。 我的最终结果将是: 项目=[汉堡包,奶酪,苏打水] 成本= [15,10,15]

  • 问题内容: 如何在有序列表中将数字左对齐? 在有序列表中的数字后面更改字符? 还有一种CSS解决方案,可以从数字更改为字母/罗马列表,而不是在ol元素上使用type属性。 我对Firefox 3上的答案最感兴趣。 问题答案: 这是我在Firefox 3,Opera和Google Chrome中使用的解决方案。该列表仍显示在IE7中(但没有右括号和左对齐数字): 编辑: 包括由斯特拉格的多行修复 还