Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าแก้ไขสมาชิกเดียวในอาร์เรย์ ทำให้สองอาร์เรย์เท่ากันได้หรือไม่ ใน Python


ปัญหา

ให้อาร์เรย์ 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. เรียงลำดับทั้งสองอาร์เรย์
  2. หาตำแหน่งที่ต่างกัน (ต้องมีสูงสุด 1 ตำแหน่ง)
  3. ถ้าไม่มีตำแหน่งต่างกัน → True
  4. ถ้ามี 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