ধরুন আমাদের দুটি সাজানো অ্যারে A এবং B আছে। আমাদের সেগুলিকে একত্রিত করতে হবে এবং শুধুমাত্র একটি সাজানো অ্যারে সি তৈরি করতে হবে। তালিকার আকার ভিন্ন হতে পারে।
উদাহরণস্বরূপ, ধরুন 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],
- নয়
- শেষ :=শেষ – ১
- যখন j এর দৈর্ঘ্য
- যদি i> শেষ হয় এবং A[i] না হয়, তাহলে A[i] :=B[j], এবং j 1 দ্বারা বাড়ান
- অন্যথায় যদি A[i]> B[j], তাহলে shift(A, i), A[i] :=B[j], শেষ এবং j 1 দ্বারা বাড়ান
- i 1 দ্বারা বাড়ান
শিফট পদ্ধতি নিচের মত কাজ করবে -
- ইনপুট num_arr নিন, এবং i
- j :=num_arr – 1 এর দৈর্ঘ্য
- যদিও num_arr [j] do j :=j – 1
- যখন j>=i, do 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]