สมมติว่าเรามีรายการตัวเลขชื่อ nums เรียงลำดับจากน้อยไปมาก เรายังมีค่า k ต้องตรวจสอบว่ามีสองสมาชิกในรายการที่บวกกันได้ k หรือไม่ ตัวเลขอาจเป็นลบหรือศูนย์ ต้องแก้ปัญหาแบบใช้พื้นที่คงที่ (constant space)
เช่น ถ้าอินพุตคือ nums = [-8, -3, 2, 7, 9], k = 4 ผลลัพธ์จะเป็น True เพราะ 7 + (-3) = 4 เท่ากับ k
ขั้นตอนการแก้ปัญหา
i := 0,j := ขนาดของ nums - 1- ในขณะที่
i < j:cur_sum := nums[i] + nums[j]- ถ้า
cur_sum == kคืนค่าTrue - มิฉะนั้นถ้า
cur_sum < kให้i := i + 1 - มิฉะนั้น
j := j - 1
- คืนค่า
False
ตัวอย่างการใช้งาน
def solve(nums, k):
i = 0
j = len(nums) - 1
while i < j:
cur_sum = nums[i] + nums[j]
if cur_sum == k:
return True
elif cur_sum < k:
i += 1
else:
j -= 1
return False
nums = [-8, -3, 2, 7, 9]
k = 4
print(solve(nums, k))
อินพุต
[-8, -3, 2, 7, 9], 4
เอาต์พุต
True