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
列印頁面