Python程式:查詢最小絕對差之和
假設我們有兩個相同大小的正值陣列 nums1 和 nums2。這兩個陣列的絕對差之和是每個 0 <= i < n(0 索引)的 |nums1[i] - nums2[i]| 之和。現在,我們可以用 nums1 中的任何其他元素替換 nums1 中最多一個元素,以最小化絕對差之和。我們必須找到替換 nums1 中最多一個元素後的最小絕對差之和。答案可能非常大,所以將其模 10^9 + 7 返回。
因此,如果輸入類似於 nums1 = [2,8,6],nums2 = [3,4,6],則輸出將為 3,因為我們可以找到兩個可能的最佳解決方案
用索引 0 處的元素替換索引 1 處的元素:[2,8,6] => [2,2,6],或者
用索引 2 處的元素替換索引 1 處的元素:[2,8,6] => [2,6,6]。
它們都得到 |2-3| + (|2-4| 或 |6-4|) + |6-6| = 3 的差之和。
為了解決這個問題,我們將遵循以下步驟:
如果 nums1 等於 nums2,則
返回(0)
minn_diff := -無窮大
ind := -1
對於 i 從 0 到 nums1 的大小 - 1,執行以下操作
如果 |nums1[i]-nums2[i]| > minn_diff,則
ind := i
minn_diff := |nums1[i] - nums2[i]|
diff := |nums1[ind] - nums2[ind]|
index := ind
對於 i 從 0 到 nums1 的大小 - 1,執行以下操作
如果 i 不等於 ind,則
如果 |nums1[i] - nums2[ind]| < diff,則
index := i
diff := |nums1[i]-nums2[ind]|
summ := 0
對於 i 從 0 到 nums1 的大小 - 1,執行以下操作
如果 i 等於 ind,則
summ := summ + |nums1[index] - nums2[i]|
否則,
summ := summ + |nums1[i] - nums2[i]|
返回 summ 模 (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
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP