Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 정렬된 배열 병합

<시간/>

정렬된 배열 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의 길이 정의
  • 종료 중>=0이고 A[종료]가 아님,
    • 끝 :=끝 – 1
  • while j 의 길이
  • i> A[i]가 아닌 끝이면 A[i] :=B[j]이고 j를 1만큼 증가
  • 그렇지 않으면 A[i]> B[j]이면 shift(A, i), A[i] :=B[j]를 수행하고 end와 j를 1만큼 증가
  • i를 1 증가

시프트 방법은 아래와 같이 작동합니다 -

  • num_arr 입력 및 i
  • j :=num_arr의 길이 – 1
  • 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]