मान लीजिए हमारे पास दो पॉजिटिव-वैल्यूड ऐरे nums1 और nums2 हैं, जिनका आकार समान है। इन दो ऐरे का निरपेक्ष योग अंतर प्रत्येक 0 <= i < n के लिए |nums1[i] - nums2[i]| का योग है। अब, हम nums1 के अधिकतम एक तत्व को nums1 के किसी अन्य तत्व से बदल सकते हैं ताकि निरपेक्ष योग अंतर न्यूनतम हो। हमें nums1 में अधिकतम एक तत्व को बदलने के बाद न्यूनतम निरपेक्ष योग अंतर ढूंढना है। उत्तर बहुत बड़ा हो सकता है इसलिए इसे 10^9 + 7 मॉड्यूलो वापस करें।
उदाहरण के लिए, यदि इनपुट 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 := -infinity,ind := -1iको 0 सेnums1के आकार - 1 तक लूप चलाएं:- यदि
|nums1[i] - nums2[i]| > minn_diff, तोind := iऔरminn_diff := |nums1[i] - nums2[i]|
- यदि
diff := |nums1[ind] - nums2[ind]|,index := indiको 0 सेnums1के आकार - 1 तक लूप चलाएं:- यदि
i != ind, तो:- यदि
|nums1[i] - nums2[ind]| < diff, तोindex := iऔरdiff := |nums1[i] - nums2[ind]|
- यदि
- यदि
summ := 0iको 0 सेnums1के आकार - 1 तक लूप चलाएं:- यदि
i == 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