我已经开始处理Daily Code逻辑问题,并且收到了第一个问题,这很简单,但是我不明白“一次完成”的意思。它只需要一行吗?如果是,在这个问题上怎么可能? 那就是问题和我的代码:
##Good morning! Here's your coding interview problem for today.
##This problem was recently asked by Google.
##Given a list of numbers and a number k, return whether any two numbers from the list add up to k.
##For example, given [10, 15, 3, 7] and k of 17, return true since 10 + 7 is 17.
##Bonus: Can you do this in one pass?
def equivalent_sum(n,list_of_n):
for x in list_of_n:
for y in list_of_n:
boolean = False
if x != y:
if x + y == n:
boolean = True
print("{} + {} {}".format(x,y,boolean))
l_of_numbers = [2,3,7,10,13,17,21]
equivalent_sum(20,l_of_numbers)
答案 0 :(得分:1)
每秒钟==> O(n)时间复杂度
您将遍历该列表一次:
passed_nums = set()
numbers = [2,3,7,10,13,17,21]
k = 17
def equivalent_sum(numbers):
for num in numbers:
diff = k - num
if diff in passed_nums:
return True
passed_nums.add(num)
return False
equivalent_sum(numbers)
或者您可以使用:
num_set = set(numbers)
any(k - e in num_set for e in numbers)
内建函数更快,因为它们在C代码上运行