크기가 같은 두 개의 양수 값 배열 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 :=-무한대
인드 :=-1
범위 0에서 nums1 - 1의 크기에 있는 i에 대해
경우 |nums1[i]-nums2[i]|> minn_diff, 다음
인드 :=나는
minn_diff :=|nums1[i] - nums2[i]|
diff :=|nums1[ind] - nums2[ind]|
인덱스 :=인드
범위 0에서 nums1 - 1의 크기에 있는 i에 대해
i가 ind와 같지 않으면
if |nums1[i] - nums2[ind]| <차이, 그럼
색인 :=i
diff :=|nums1[i]-nums2[ind]|
합계 :=0
범위 0에서 nums1 - 1까지의 i에 대해 수행
i가 ind와 같으면
합계 :=합계 + |nums1[인덱스] - nums2[i]|
그렇지 않으면
합계 :=합계 + |nums1[i] - nums2[i]|
합계 모드 반환(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