Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import time
- import csv
- """
- 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?
- """
- # Horribly inefficient one liner - O(n^2)
- # def dcp_list(nums,k): return k in [nums[i] + nums[j] for i in range(len(nums)) for j in range(i+1,len(nums))]
- def run():
- # Daily Coding Problem answer
- def dcp(nums, k):
- start = time.time()
- for i in range(len(nums)):
- for j in range(i+1,len(nums)):
- if nums[i] + nums[j] == k:
- return time.time() - start
- return time.time() - start
- # Test dcp
- results = [['Length', 'r500', 'r1.000', 'r10.000', 'r100.000', 'r1.000.000']]
- random.seed(0)
- for i in range(100,10001,100):
- for _ in range(50):
- new_line = [i]
- for n in [500,1000,10000,100000,1000000]:
- new_line.append(dcp(
- [random.randint(1,n) for _ in range(i)],
- random.randint(2,n*2)))
- results.append(new_line)
- # Save to csv
- with open(r'F:\svand\Documents\Personal\Programming\Python\DailyChallenge 001\test_results.csv', 'w') as f:
- w = csv.writer(f, delimiter=',', quotechar='"', lineterminator='\r')
- w.writerows(results)
- run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement