สมมติว่าเรามีสองอาร์เรย์ nums1 และ nums2 และอีกค่าหนึ่งคือ k เราต้องตรวจสอบว่าอาร์เรย์ทั้งสองสามารถสร้างให้เท่ากันได้หรือไม่โดยแก้ไของค์ประกอบใดองค์ประกอบหนึ่งจาก nums1 ด้วยวิธีต่อไปนี้ (เพียงครั้งเดียว):เราสามารถเพิ่มค่าใดก็ได้จากช่วง [-k, k] ไปยังองค์ประกอบใด ๆ ของ nums1พี>
ดังนั้น หากอินพุตเป็น nums1 =[5,7,11] nums2 =[5,5,11] k =8 ผลลัพธ์จะเป็น True เมื่อเราเพิ่ม -2 ได้ (ในช่วง [-8,8] ) กับ nums1[1] ให้เป็น 5 ก็จะเหมือนกับ nums2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- เรียงลำดับรายการ nums1 และ nums2
- อุณหภูมิ :=เท็จ
- idx :=-1
- สำหรับฉันในช่วง 0 ถึงขนาด nums1 - 1 ทำ
- ถ้า nums1[i] ไม่เหมือนกับ nums2[i] แล้ว
- ถ้า temp เป็นจริง
- คืนค่าเท็จ
- อุณหภูมิ :=จริง
- idx :=ฉัน
- ถ้า temp เป็นจริง
- ถ้า nums1[i] ไม่เหมือนกับ nums2[i] แล้ว
- ถ้า idx คือ -1 หรือ |nums1[idx]-nums2[idx]| <=k แล้ว
- คืนค่า True
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
def solve(nums1, nums2, k): nums1.sort() nums2.sort() temp = False idx = -1 for i in range(len(nums1)): if nums1[i] != nums2[i]: if temp: return False temp = True idx = i if idx == -1 or abs(nums1[idx]-nums2[idx]) <= k: return True return False nums1 = [5,7,11] nums2 = [5,5,11] k = 8 print(solve(nums1, nums2, k))
อินพุต
[5,7,11], [5,5,11], 8
ผลลัพธ์
True