Giả sử chúng ta có hai mảng có giá trị dương nums1 và nums2, có cùng kích thước. Hiệu tổng tuyệt đối của hai mảng này là tổng của | nums1 [i] - nums2 [i] | với mỗi 0 <=i
Vì vậy, nếu đầu vào giống như nums1 =[2,8,6], nums2 =[3,4,6], thì đầu ra sẽ là 3 vì, chúng ta có thể tìm thấy hai giải pháp tối ưu khả thi
Thay thế phần tử ở chỉ mục 1 bằng phần tử ở chỉ mục 0:[2,8,6] => [2,2,6] hoặc
Thay phần tử ở chỉ mục 1 bằng phần tử ở chỉ mục 2:[2,8,6] => [2,6,6].
Cả hai người đều nhận được tổng chênh lệch là | 2-3 | + (| 2-4 | hoặc | 6-4 |) + | 6-6 | =3.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
nếu nums1 giống nums2 thì
trở lại (0)
minn_diff:=-infinity
ind:=-1
đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy thực hiện
nếu | nums1 [i] -nums2 [i] |> minn_diff, sau đó
ind:=i
minn_diff:=| nums1 [i] - nums2 [i] |
diff:=| nums1 [ind] - nums2 [ind] |
index:=ind
đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy thực hiện
nếu tôi không giống với ind, thì
nếu | nums1 [i] - nums2 [ind] |
chỉ mục:=i
diff:=| nums1 [i] -nums2 [ind] |
tổng:=0
đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy thực hiện
nếu tôi giống với ind, thì
summ:=summ + | nums1 [index] - nums2 [i] |
nếu không,
sum:=summ + | nums1 [i] - nums2 [i] |
trả về bản mod tổng (10 ^ 9 + 7)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
def solve(nums1, nums2):
if(nums1==nums2):
return(0)
minn_diff = float('-inf')
ind = -1
for i in range(len(nums1)):
if(abs(nums1[i]-nums2[i]) > minn_diff):
ind = i
minn_diff = abs(nums1[i]-nums2[i])
diff = abs(nums1[ind]-nums2[ind])
index = ind
for i in range(len(nums1)):
if(i!=ind):
if(abs(nums1[i]-nums2[ind])<diff):
index = i
diff = abs(nums1[i]-nums2[ind])
summ = 0
for i in range(len(nums1)):
if(i==ind):
summ += abs(nums1[index]-nums2[i])
else:
summ += abs(nums1[i]-nums2[i])
return(summ%(10**9 + 7))
nums1 = [2,8,6]
nums2 = [3,4,6]
print(solve(nums1, nums2))
Đầu vào
[2,8,6], [3,4,6]
Đầu ra
3