मान लीजिए कि हमारे पास संख्याओं की दो सूचियाँ हैं जिन्हें अंक और लागत कहा जाता है। अब विचार करें, एक ऑपरेशन है जहां हम लागत लागत [i] के लिए संख्या [i] बढ़ा या घटा सकते हैं। हम इनमें से किसी भी संख्या में ऑपरेशन कर सकते हैं, और हम सभी तत्वों को अंकों में बराबर बनाना चाहते हैं। हमें आवश्यक न्यूनतम कुल लागत का पता लगाना होगा।
इसलिए, यदि इनपुट अंकों की तरह है =[3, 2, 4] लागत =[1, 10, 2], तो आउटपुट 5 होगा, जैसे कि हम 1 की लागत के लिए संख्या 3 को 2 में घटा सकते हैं। हम 2 प्रत्येक की लागत पर 4 दो गुना घटा सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन हेल्पर() को परिभाषित करें। यह लक्ष्य लेगा
-
कुल:=0
-
प्रत्येक i,n के लिए एन्यूमरेट(अंक) में करें
-
यदि लक्ष्य n के समान नहीं है, तो
-
कुल:=कुल + |n-लक्ष्य| * लागत[i]
-
-
-
कुल वापसी
-
मुख्य विधि से, निम्न कार्य करें:
-
निम्न :=0, उच्च :=अधिकतम अंक
-
जबकि निम्न <उच्च गैर-शून्य है, करें
-
मध्य:=(निम्न + उच्च) / 2
-
यदि सहायक (मध्य) <सहायक (मध्य + 1), तो
-
उच्च :=मध्य
-
-
अन्यथा,
-
कम :=मध्य + 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