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)
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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