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

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


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

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

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

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

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

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

  • ถ้า s1> s2 แล้ว

    • สลับ nums1 และ nums2

    • สลับ s1 และ s2

  • ตอบ :=0

  • ซ้าย :=0, ขวา :=ขนาดของ nums2 -1

  • ขณะที่ซ้าย <ความยาวของ nums1 หรือขวา>=0 ทำ

    • ถ้า s1 เหมือนกับ s2 แล้ว

      • กลับมาอีกครั้ง

    • curr_left :=nums1[left] if left

    • curr_right :=nums2[right] if right>=0 มิฉะนั้น 0

    • ถ้า 6-curr_left>=curr_right-1 แล้ว

      • s1 :=s1 + ขั้นต่ำ 6-curr_left และ s2-s1

      • ซ้าย :=ซ้าย + 1

    • มิฉะนั้น

      • s2 :=s2 - ขั้นต่ำของ curr_right-1 และ s2-s1

      • ขวา :=ขวา - 1

    • ans :=ans + 1

  • คืนค่า -1 หาก s1 ไม่เหมือนกับ s2 มิฉะนั้นจะเป็น

ตัวอย่าง

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

def solve(nums1, nums2):
   s1 = sum(nums1)
   s2 = sum(nums2)
   nums1.sort()
   nums2.sort()
   if s1>s2:
      nums1, nums2 = nums2, nums1
      s1, s2 = s2, s1

   ans = 0
   left, right = 0, len(nums2)-1
   while(left<len(nums1) or right>=0):
      if s1==s2:
         return ans
      curr_left = nums1[left] if left<len(nums1) else 7
      curr_right = nums2[right] if right>=0 else 0
      if 6-curr_left>=curr_right-1:
         s1+= min(6-curr_left, s2-s1)
         left+=1
      else:
         s2-= min(curr_right-1, s2-s1)
         right-=1
      ans+=1
   return -1 if s1!=s2 else ans

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

อินพุต

[1,5,6], [4,1,1]

ผลลัพธ์

2