Computer >> Máy Tính >  >> Lập trình >> Python

Hợp nhất mảng đã sắp xếp bằng Python

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]