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

ตรวจสอบว่าเป็นไปได้หรือไม่ที่จะทำให้ทั้งสองอาร์เรย์เท่ากันโดยการปรับเปลี่ยนองค์ประกอบเดียวในPython


สมมติว่าเรามีสองอาร์เรย์ 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 :=ฉัน
  • ถ้า 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