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