Giả sử chúng ta có hai danh sách được gọi là số và số nhân. Bây giờ hãy xem xét một phép toán trong đó chúng ta có thể xóa bất kỳ số nào khỏi số và xóa bất kỳ số nào khỏi cấp số nhân sau đó nhân chúng với nhau. Chúng ta phải lặp lại thao tác này cho đến khi một trong các danh sách trống, chúng ta phải tìm tổng lớn nhất của các số nhân.
Vì vậy, nếu đầu vào giống như nums =[-4, 4, 3] nhân =[-2, 2], thì đầu ra sẽ là 16, vì Chúng ta có thể kết hợp -4 với -2 và 4 với 2 để được -4 * -2 + 4 * 2.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
sắp xếp số lượng danh sách
-
sắp xếp các số nhân của danh sách
-
res:=0
-
nếu kích thước của nums
-
hoán đổi số và số nhân:=số nhân, số
-
-
n:=kích thước của nums
-
m:=kích thước của số nhân
-
đối với tôi trong phạm vi từ 0 đến m - 1, hãy thực hiện
-
nếu nhân [i] <=0, thì
-
res:=res + nums [i] * nhân [i]
-
-
nếu không,
-
res:=res + số nhân [i] * nums [n - (m - i)]
-
-
-
trả lại res
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn
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))
Đầu vào
[-4, 4, 3], [-2, 2]
Đầu ra
16