สมมติว่าเรามีอาร์เรย์ที่มีค่าบวกสองตัวคือ nums1 และ nums2 ที่มีขนาดเท่ากัน ผลรวมสัมบูรณ์ของสองอาร์เรย์นี้คือผลรวมของ |nums1[i] - nums2[i]| สำหรับแต่ละ 0 <=i
ดังนั้น หากอินพุตเป็น nums1 =[2,8,6], nums2 =[3,4,6] ผลลัพธ์จะเป็น 3 เพราะเราสามารถหาวิธีแก้ปัญหาที่เหมาะสมที่สุดได้สองวิธี
-
แทนที่องค์ประกอบที่ดัชนี 1 ด้วยองค์ประกอบที่ดัชนี 0:[2,8,6] => [2,2,6] หรือ
-
แทนที่องค์ประกอบที่ดัชนี 1 ด้วยองค์ประกอบที่ดัชนี 2:[2,8,6] => [2,6,6]
ทั้งคู่ได้รับผลต่าง |2-3| + (|2-4| หรือ |6-4|) + |6-6| =3.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ถ้า nums1 เหมือนกับ nums2 แล้ว
-
กลับ(0)
-
-
minn_diff :=-อินฟินิตี้
-
ind :=-1
-
สำหรับฉันในช่วง 0 ถึงขนาด nums1 - 1 ทำ
-
ถ้า |nums1[i]-nums2[i]|> minn_diff แล้ว
-
ind :=ฉัน
-
minn_diff :=|nums1[i] - nums2[i]|
-
-
-
diff :=|nums1[ind] - nums2[ind]|
-
ดัชนี :=ind
-
สำหรับฉันในช่วง 0 ถึงขนาด nums1 - 1 ทำ
-
ถ้าฉันไม่เหมือน ind แล้ว
-
ถ้า |nums1[i] - nums2[ind]| <แตกต่าง แล้วก็
-
ดัชนี :=ผม
-
diff :=|nums1[i]-nums2[ind]|
-
-
-
-
ผลรวม :=0
-
สำหรับฉันในช่วง 0 ถึงขนาด nums1 - 1 ทำ
-
ถ้าฉันเหมือนกับ ind แล้ว
-
summ :=summ + |nums1[index] - nums2[i]|
-
-
มิฉะนั้น
-
summ :=summ + |nums1[i] - nums2[i]|
-
-
-
คืนค่า summ mod (10^9 + 7)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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))
อินพุต
[2,8,6], [3,4,6]
ผลลัพธ์
3