মনে করুন nums এবং multipliers দুটি লিস্ট। একটি অপারেশন বিবেচনা করুন যেখানে nums থেকে যেকোনো সংখ্যা এবং multipliers থেকে যেকোনো সংখ্যা সরিয়ে গুণ করুন। এই অপারেশনটি কোনো এক লিস্ট খালি না হওয়া পর্যন্ত চলবে, আমাদের গুণিত সংখ্যাগুলোর সর্বাধিক যোগফল বের করতে হবে।
ইনপুট nums = [-4, 4, 3], multipliers = [-2, 2] হলে আউটপুট হবে ১৬, কারণ -4 সাথে -2 এবং 4 সাথে 2 মিলিয়ে -4 * -2 + 4 * 2 পাই।
সমাধানের ধাপসমূহ:
- nums লিস্ট সর্ট করুন
- multipliers লিস্ট সর্ট করুন
- res := 0
- যদি len(nums) < len(multipliers): nums, multipliers = multipliers, nums
- n := len(nums), m := len(multipliers)
- i = 0 থেকে m-1 পর্যন্ত:
- যদি multipliers[i] <= 0: res += nums[i] * multipliers[i]
- অন্যথায়: res += multipliers[i] * nums[n - (m - i)]
- res ফেরত দিন
উদাহরণ
বাস্তবায়ন:
def solve(nums, multipliers):
nums.sort()
multipliers.sort()
res = 0
if len(nums) < len(multipliers):
nums, multipliers = multipliers, nums
n, m = len(nums), len(multipliers)
for i in range(m):
if multipliers[i] <= 0:
res += nums[i] * multipliers[i]
else:
res += multipliers[i] * nums[n - (m - i)]
return res
nums = [-4, 4, 3]
multipliers = [-2, 2]
print(solve(nums, multipliers))
ইনপুট
[-4, 4, 3], [-2, 2]
আউটপুট
16