สมมติว่าเราต้องการสร้างโครงสร้างข้อมูลที่มีสองเมธอด:
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
ขั้นตอนการแก้ปัญหา
- กำหนด Constructor:
nums := เซตใหม่multiple := เซตใหม่
- กำหนดฟังก์ชัน
add(val):- ถ้า
valอยู่ในnumsเพิ่มเข้าmultiple - มิฉะนั้น เพิ่มเข้า
nums
- ถ้า
- กำหนดฟังก์ชัน
find(val):- สำหรับแต่ละ
nในnums:- ถ้า
n + n == valคืนค่าTrueถ้าnอยู่ในmultiple - มิฉะนั้นถ้า
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))
อินพุต
obj.find(9), obj.find(11), obj.find(15)
เอาต์พุต
True True False