ปัญหา
ให้อาร์เรย์ nums1, nums2 และค่า k สามารถแก้ไข สมาชิกเพียงตัวเดียว ใน nums1 โดยบวกค่าในช่วง [-k, k] ได้ ต้องการทราบว่าสามารถทำให้สองอาร์เรย์เท่ากันได้หรือไม่
ตัวอย่าง
nums1 = [5,7,11], nums2 = [5,5,11], k = 8 → แก้ไข nums1[1] โดยบวก -2 (อยู่ในช่วง [-8,8]) ได้ [5,5,11] → True
แนวคิดการแก้ปัญหา
- เรียงลำดับทั้งสองอาร์เรย์
- หาตำแหน่งที่ต่างกัน (ต้องมีสูงสุด 1 ตำแหน่ง)
- ถ้าไม่มีตำแหน่งต่างกัน →
True - ถ้ามี 1 ตำแหน่ง ตรวจสอบว่า
|nums1[i] - nums2[i]| <= k
โค้ดตัวอย่าง
def solve(nums1, nums2, k):
nums1.sort()
nums2.sort()
diff_idx = -1
for i in range(len(nums1)):
if nums1[i] != nums2[i]:
if diff_idx != -1:
return False # ต่างกันมากกว่า 1 ตำแหน่ง
diff_idx = i
if diff_idx == -1:
return True
return abs(nums1[diff_idx] - nums2[diff_idx]) <= k
nums1 = [5, 7, 11]
nums2 = [5, 5, 11]
k = 8
print(solve(nums1, nums2, k)) # True
อินพุต / เอาต์พุต
Input: [5,7,11], [5,5,11], 8 Output: True