Giả sử chúng ta có hai mảng được sắp xếp A và B. Chúng ta phải hợp nhất chúng lại và chỉ tạo thành một mảng được sắp xếp C. Kích thước của danh sách có thể khác nhau.
Ví dụ:giả sử A =[1,2,4,7] và B =[1,3,4,5,6,8], thì danh sách hợp nhất C sẽ là [1,1,2,3,4, 4,5,6,7,8]
Để giải quyết vấn đề này, hãy làm theo các bước sau -
- xác định i:=0, j:=0 và end:=độ dài của A - 1
- while end> =0 và không phải A [end],
- end:=end - 1
- while j <độ dài của B
- nếu i> kết thúc chứ không phải A [i], thì A [i]:=B [j] và tăng j lên 1
- ngược lại nếu A [i]> B [j], thì hãy thực hiện shift (A, i), A [i]:=B [j], tăng end và j lên 1
- tăng tôi lên 1
Phương thức shift sẽ hoạt động như bên dưới -
- lấy num_arr đầu vào và tôi
- j:=độ dài của num_arr - 1
- while not num_arr [j] do j:=j - 1
- while j> =i, do num_arr [j + 1] =num_arr [j] và j:=j - 1
Hãy cho chúng tôi xem việc triển khai để hiểu rõ hơn
Ví dụ
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))
Đầu vào
[1,2,3,0,0,0] [2,5,6]
Đầu ra
[1, 2, 2, 3, 5, 6]