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在nums中,则
- 将val插入到multiple中
- 否则,
- 将val插入到nums中
- 定义一个find()函数。该函数将接收val。
- 对于nums中的每个n:
- 如果n + n等于val,则
- 当n在multiple中时返回true
- 否则,如果val - n在nums中,则
- 对于nums中的每个n:
- 返回True
返回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
打印页面