在Python中创建数据结构以检查对数和是否与值相同的程序
假设我们想要创建一个有两种方法的数据结构 –
- add(val):将值val添加到数据结构中。
- find(val):检查是否存在两个元素它们的和为val。
我们必须设计这个数据结构,以便我们可以随时得到结果。我们不会每次查询时都搜索数字。
因此,如果输入内容为:创建一个对象obj,添加几个数字6, 14, 3, 8, 11, 15,然后检查 obj.find(9),obj.find(11),obj.find(15),则输出将为:True, True, False,因为 9 可以由 6+3 组成,11 可以由 3+8 组成。现在 15 存在于数据结构中,但没有两个数字的和与 15 相同。
为了解决问题,我们将执行以下步骤 –
- 定义构造器。
- nums:一个新集合。
- multiple:一个新的集合。
- 定义add()函数。这将获取val
- 将val插入multiple
- 否则,
- 将val插入nums中。
- 定义一个函数find()。这将获取val
- 对于nums中的每个n,请执行以下操作:
- 如果n+n与val相同,则
- 当n在multiple中时,返回true
- 否则,当val-n在nums中时,则
- 返回True
- 如果n+n与val相同,则
- 返回False
示例
让我们看一下以下实现,以更好的了解 –
class PairSumChecker:
def __init__(self):
self.nums = set()
self.multiple = set()
def add(self, val):
if val in self.nums:
self.multiple.add(val)
else:
self.nums.add(val)
def find(self, val):
for n in self.nums:
if n + n == val:
return n in self.multiple
elif val - n in self.nums:
return True
return False
obj = PairSumChecker()
obj.add(6)
obj.add(14)
obj.add(3)
obj.add(8)
obj.add(11)
obj.add(15)
print(obj.find(9))
print(obj.find(11))
print(obj.find(15))
输入
print(obj.find(9))
print(obj.find(11))
print(obj.find(15))
输出
True
True
False