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

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


สมมติว่าเรามีรายการตัวเลขสองรายการที่เรียกว่า nums และ cost ทีนี้ลองพิจารณา มีการดำเนินการที่เราสามารถเพิ่มหรือลด nums[i] สำหรับ cost cost[i] ได้ เราสามารถดำเนินการเหล่านี้จำนวนเท่าใดก็ได้ และเราต้องการทำให้องค์ประกอบทั้งหมดมีค่าเท่ากันในจำนวน เราต้องหาต้นทุนรวมขั้นต่ำที่ต้องการ

ดังนั้นหากอินพุตเท่ากับ nums =[3, 2, 4] ต้นทุน =[1, 10, 2] ผลลัพธ์จะเป็น 5 ราวกับว่าเราสามารถลดจำนวน 3 เป็น 2 ในราคา 1 แล้ว เราลดได้ 4 ครั้ง ครั้งละ 2 ครั้ง

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

  • กำหนดฟังก์ชั่น helper() นี้จะเป็นเป้าหมาย

  • รวม :=0

  • สำหรับแต่ละ i,n ในการแจกแจง (nums) ทำ

    • ถ้าเป้าหมายไม่เหมือนกับ n แล้ว

      • Total :=total + |n-target| * ค่าใช้จ่าย[i]

  • ผลตอบแทนรวม

  • จากวิธีหลัก ให้ทำดังนี้:

  • ต่ำ :=0, สูง :=สูงสุดของ nums

  • ในขณะที่ต่ำ <สูงไม่เป็นศูนย์ ทำ

    • กลาง :=(ต่ำ + สูง) / 2

    • ถ้า helper(mid)

      • สูง :=กลาง

    • มิฉะนั้น

      • ต่ำ :=กลาง + 1

  • ผู้ช่วยกลับ(ต่ำ)

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

ตัวอย่าง

class Solution:
   def solve(self, nums, costs):
      def helper(target):
         total = 0
         for i,n in enumerate(nums):
            if target != n:
               total += abs(n-target) * costs[i]
         return total
      low,high = 0, max(nums)
      while low < high:
         mid = low + high >> 1
         if helper(mid) < helper (mid+1):
            high = mid
         else:
            low = mid + 1
      return helper(low)
ob = Solution()
nums = [3, 2, 4]
costs = [1, 10, 2]
print(ob.solve(nums, costs))

อินพุต

[3, 2, 4], [1, 10, 2]

ผลลัพธ์

5