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?
Very Bad Solution:
def add_up_to_k_v1(mylist, k):
ans = [x+y==k for x in mylist for y in mylist]
return sum(ans) > 0
My Original Solution Demo
def add_up_to_k_v2(mylist, k):
for i, num in enumerate(mylist):
if k-num in mylist:
return True
return False
assert add_up_to_k_v1(mylist, k) == True, 'fail'
assert add_up_to_k_v2(mylist, k) == True, 'fail'
Zyaad Jaunoo: Using a “set” instead of a list will bring down the complexity to nlogn.