在 Python 中创建用于检查对和是否与值相同的数据结构的程序

pythonserver side programmingprogramming更新于 2026/1/5 8:12:17

假设我们想要创建一个具有两个方法 − 的数据结构

  • 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 插入到多个中
  • 否则,
    • 将 val 插入到 nums 中
  • 定义一个函数 find() 。这将采用 val
  • 对于 nums 中的每个 n,执行
    • 如果 n + n 与 val 相同,则
      • 当 n 在多个中时返回 true
    • 否则当 val - n 在 nums 中时,则
      • 返回 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

相关文章


有用资源