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

โปรแกรมค้นหาต้นทุนขั้นต่ำเพื่อลดรายการเป็นจำนวนเต็มเดียวใน Python


สมมติว่าเรามีรายการหมายเลขที่เรียกว่า nums เราสามารถลดความยาวของ nums ได้โดยการเอาตัวเลขสองตัวใดๆ ก็ตาม ลบออกแล้วผนวกผลรวมในตอนท้าย ค่าใช้จ่ายในการดำเนินการนี้คือผลรวมของจำนวนเต็มสองตัวที่เราลบออก เราต้องหาต้นทุนรวมขั้นต่ำของการลดจำนวนลงเหลือหนึ่งจำนวนเต็ม

ดังนั้นหากอินพุตเป็นเหมือน nums =[2, 3, 4, 5, 6] ผลลัพธ์จะเป็น 45 เนื่องจากเราเอา 2 และ 3 ออกแล้วเอาออกเพื่อให้ได้ [4, 5, 6, 5] เราก็ เอา 4 และ 5 ออกแล้วเอาออกเพื่อรับ [6, 5, 9] จากนั้นเอา 6 และ 5 จากนั้นเอาออกและเราได้ [9, 11] และสุดท้ายลบ 9 และ 11 เราจะได้ 19 ดังนั้นผลรวมคือ 45.

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

  • สร้างฮีปโดยใช้องค์ประกอบที่มีอยู่ในจำนวน
  • ตอบ :=0
  • ในขณะที่ขนาดของ nums>=2 ทำ
    • a :=องค์ประกอบสูงสุดของ heap nums
    • b :=องค์ประกอบสูงสุดของ heap nums
    • ans :=ans + a + b
    • แทรก a+b ลงใน heap nums
  • คืนสินค้า

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

ตัวอย่าง

class Solution:
   def solve(self, nums):
      import heapq
      heapq.heapify(nums)
      ans = 0
      while len(nums) >= 2:
         a = heapq.heappop(nums)
         b = heapq.heappop(nums)
         ans += a + b
         heapq.heappush(nums, a + b)
      return ans
ob = Solution()
nums = [2, 3, 4, 5, 6]
print(ob.solve(nums))

อินพุต

[2, 3, 4, 5, 6]

ผลลัพธ์

45