ধরুন আমাদের কাছে সংখ্যা এবং খরচ নামে দুটি সংখ্যার তালিকা রয়েছে। এখন বিবেচনা করুন, একটি অপারেশন আছে যেখানে আমরা খরচ খরচের জন্য সংখ্যা[i] বাড়াতে বা কমাতে পারি। আমরা এই অপারেশনগুলির যেকোন সংখ্যক সঞ্চালন করতে পারি, এবং আমরা সংখ্যায় সমস্ত উপাদান সমান করতে চাই। আমাদের প্রয়োজন সর্বনিম্ন মোট খরচ খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[3, 2, 4] খরচ =[1, 10, 2], তাহলে আউটপুট হবে 5, যেমন আমরা 1-এর খরচের জন্য 3 নম্বরটিকে 2-তে কমাতে পারি। তারপর আমরা প্রতিটি 2 খরচের জন্য 4টি দুইবার কমাতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন হেল্পার() সংজ্ঞায়িত করুন। এটি লক্ষ্য গ্রহণ করবে
-
মোট :=0
-
প্রতিটি i,n enumerate(nums) এর জন্য করুন
-
যদি লক্ষ্য n এর মত না হয়, তাহলে
-
মোট :=মোট + |n-লক্ষ্য| * খরচ[i]
-
-
-
মোট রিটার্ন
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন:
-
কম :=0, উচ্চ :=সংখ্যার সর্বাধিক
-
যখন কম <উচ্চ অ-শূন্য, করুন
-
মধ্য :=(নিম্ন + উচ্চ) / 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