मान लीजिए कि हमारे पास दो क्रमबद्ध सरणी 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 और अंत :=A – 1 की लंबाई परिभाषित करें
- अंत में>=0 और नहीं A[end],
- अंत:=अंत – 1
- जबकि j <बी की लंबाई
- यदि i> समाप्त होता है और A[i] नहीं, तो A[i] :=B[j], और j को 1 से बढ़ाएं
- अन्यथा यदि A[i]> B[j], तो शिफ्ट (A, i), A[i] :=B[j] करें, अंत और j को 1 से बढ़ाएं
- मैं 1 से बढ़ाएँ
शिफ्ट विधि नीचे की तरह काम करेगी -
- इनपुट num_arr लें, और मैं
- j :=num_arr की लंबाई - 1
- जबकि num_arr नहीं [j] do 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]