मान लीजिए हमारे पास दो क्रमबद्ध सरणी A और B हैं। हमें उन्हें मर्ज करना है और केवल एक क्रमबद्ध सरणी C बनाना है। सूचियों का आकार भिन्न हो सकता है।
उदाहरण के लिए, मान लीजिए A = [1,2,4,7] और B = [1,3,4,5,6,8], तो मर्ज की गई सूची C [1,1,2,3,4,4,5,6,7,8] होगी।
हल करने के चरण
- i := 0, j := 0 और end := A की लंबाई - 1 परिभाषित करें
- जब तक end >= 0 और not A[end],
- end := end - 1
- जब तक j < B की लंबाई
- यदि i > end और not A[i], तो A[i] := B[j], और j को 1 से बढ़ाएं
- अन्यथा यदि A[i] > B[j], तो shift(A, i) करें, A[i] := B[j], end और j को 1 से बढ़ाएं
- i को 1 से बढ़ाएं
shift मेथड नीचे की तरह काम करेगा:
- इनपुट num_arr, और i लें
- j := num_arr की लंबाई - 1
- जब तक not num_arr [j] करें j := j - 1
- जब तक j >= i, करें num_arr[j + 1] = num_arr[j], और j := j - 1
बेहतर समझ के लिए कार्यान्वयन देखें:
उदाहरण
class Solution(object):
def merge(self, nums1, m, nums2, n):
i = 0
j = 0
end = len(nums1)-1
while end>=0 and not nums1[end]:
end-=1
while j<len(nums2) :
if i>end and not nums1[i]:
nums1[i] = nums2[j]
j+=1
elif nums1[i]>nums2[j]:
self.shift(nums1,i)
nums1[i] = nums2[j]
end+=1
j+=1
i+=1
return nums1
def shift(self,num,i):
j = len(num)-1
while not num[j]:
j-=1
while j>=i:
num[j+1] = num[j]
j-=1
ob = Solution()
print(ob.merge([1,2,3,0,0,0],3,[2,5,6],3))
इनपुट
[1,2,3,0,0,0] [2,5,6]
आउटपुट
[1, 2, 2, 3, 5, 6]