-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTwo_Sum.py
More file actions
51 lines (40 loc) · 1.54 KB
/
Two_Sum.py
File metadata and controls
51 lines (40 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Two Sum
#
# Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
#
# You may assume that each input would have exactly one solution, and you may not use the same element twice.
#
# You can return the answer in any order.
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
# Cameron's Solution. Slower, but more memory efficient. O(n^2)
# for first_num in nums:
# remaining_nums = nums[(nums.index(first_num) + 1):len(nums)]
# for second_num in remaining_nums:
# if (first_num + second_num) == target:
# first_num_index = nums.index(first_num)
# second_num_index = remaining_nums.index(second_num) + first_num_index + 1
# return [first_num_index, second_num_index]
# fastest solution. Uses more memory, but O(n)
hist = {}
for index, num in enumerate(nums):
if target - num in hist:
return [hist[target - num], index]
hist[num] = index
def main():
solution = Solution()
nums = [2,7,11,15]
target = 9
print(f'First Test: nums: {nums}, target: {target}')
print(f'Output: {solution.twoSum(nums, target)}')
nums = [3,3]
target = 6
print(f'First Test: nums: {nums}, target: {target}')
print(f'Output: {solution.twoSum(nums, target)}')
if __name__ == "__main__":
main()