I have to design and implement a TwoSum
class. It should support the following operations:
add
- Add the number to an internal data structure.find
- Find if there exists any pair of numbers which sum is equal to the value.Here is my code:
class TwoSum(object):
dict = {}
def add(self,n):
dict[n] = n #TypeError: 'type' object does not support item assignment
def find(self,n):
for i in range(0,len(dict)+1):
if dict[i] == None:
continue
val = n - dict[i]
if dict[val] != None and val != i+1:
return True
return False
test = TwoSum()
test.add(1)
test.add(3)
test.add(5)
print(test.find(4)) # True
print(test.find(7)) # False
I got error message
TypeError: 'type' object does not support item assignment for "dict[n] = n"
Any help or suggestion? Thank you so much!
Lot of issues here, I'll try to go through them one by one
dict = {}
Not only is this overwriting python's dict, (see mgilson's comment) but this is the wrong data structure for the project. You should use a list instead (or a set if you have unique unordered values)
The data structure is an instance variable, it needs to be defined with self
and inside the __init__
function. You should be using something like this:
class TwoSum(object):
def __init__(self):
self.numbers = []
def add(self,n):
dict[n] = n
Assigning items to a dictionairy is not the way to do it. You should instead append to your list. Additionally you need to append to the list for that instance using self.variableName = value
That range is wrong, and you would need a nested range, or itertools.combinations since you have to check for any two numbers that sum to a certain value, pythons sum()
is handy here.
To loop through the numbers you can use two ranges or itertools.combinations
import itertools
class TwoSum(object):
def __init__(self):
self.numbers = []
def add(self, num):
self.numbers.append(num)
def find(self, desiredSum):
for nums in itertools.combinations(self.numbers, 2):
if sum(nums) == desiredSum:
return True
return False
test = TwoSum()
test.add(1)
test.add(3)
test.add(5)
print(test.find(4))
print(test.find(7))
#True
#False
def find(self, desiredSum):
for num1 in self.numbers:
for num2 in self.numbers:
if num1 + num2 == desiredSum and num1 != num2:
return True
return False
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With