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

โปรแกรมค้นหาการดำเนินการขั้นต่ำที่จำเป็นในการทำให้สองอาร์เรย์มีค่าเท่ากันในPython


สมมติว่าเรามีสองรายการ nums1 และ nums2 โดยที่แต่ละองค์ประกอบในทั้งสองรายการในช่วง 1 ถึง 6 ตอนนี้ให้พิจารณาการดำเนินการที่เราสามารถเลือกตัวเลขจาก nums1 หรือ nums2 และอัปเดตค่าเป็นตัวเลขระหว่าง 1 ถึง 6 เราต้องหาจำนวนขั้นต่ำของการดำเนินการที่จำเป็นเพื่อให้ผลรวมของสองอาร์เรย์นี้เท่ากัน หากเราหาวิธีแก้ปัญหาไม่ได้ ให้คืนค่า -1

ดังนั้น หากอินพุตเป็น nums1 =[1, 4] nums2 =[5, 4, 4] ผลลัพธ์จะเป็น 2 เพราะเราสร้าง 1 จาก nums1 ถึง 6 ได้ ดังนั้นผลรวมของ nums1 คือ 10 จึงเปลี่ยน ตัวใดตัวหนึ่งจาก nums2 ถึง 1 ดังนั้นผลรวมของมันคือ 10 ด้วย

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • sa :=ผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ใน nums1

  • sb :=ผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ใน nums2

  • ถ้า sa> sb แล้ว

    • สลับ nums1 และ nums2

    • สลับ sa และ sb

  • เรียงลำดับรายการ nums1

  • เรียงลำดับรายการ nums2 ในลำดับย้อนกลับ

  • res :=0

  • toadd :=sb - sa

  • ผม :=0, j :=0

  • ขณะที่คางคก> 0 ทำ

    • res :=res + 1

    • ถ้าฉัน <ขนาดของ nums1 และ j <ขนาดของ nums2 แล้ว

      • resa :=6 - nums1[i]

      • resb :=nums2[j] - 1

      • ถ้า resa> resb แล้ว

        • toadd :=toadd - resa

        • ผม :=ผม + 1

      • มิฉะนั้น

        • toadd :=toadd - resb

        • เจ :=เจ + 1

      • มิฉะนั้นเมื่อฉัน <ขนาดของ nums1 แล้ว

        • resa :=6 - nums1[i]

        • toadd :=toadd - resa

        • ผม :=ผม + 1

      • มิฉะนั้นเมื่อ j <ขนาดของ nums2 แล้ว

        • resb :=nums2[j] - 1

        • toadd :=toadd - resb

        • เจ :=เจ + 1

      • มิฉะนั้น

        • กลับ -1

  • ผลตอบแทน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น

def solve(nums1, nums2):
   sa = sum(nums1)
   sb = sum(nums2)
   if sa > sb:
      nums1, nums2 = nums2, nums1
      sa, sb = sb, sa

   nums1.sort()
   nums2.sort(reverse=True)
   res = 0
   toadd = sb - sa
   i = 0
   j = 0
   while toadd > 0:
      res += 1
      if i < len(nums1) and j < len(nums2):
         resa = 6 - nums1[i]
         resb = nums2[j] - 1
         if resa > resb:
            toadd -= resa
            i += 1
         else:
            toadd -= resb
            j += 1
      elif i < len(nums1):
         resa = 6 - nums1[i]
         toadd -= resa
         i += 1
      elif j < len(nums2):
         resb = nums2[j] - 1
         toadd -= resb
         j += 1
      else:
         return -1

   return res

nums1 = [1, 4]
nums2 = [5, 4, 4]
print(solve(nums1, nums2))

อินพุต

[2,1,4,3,5,4]

ผลลัพธ์

2