Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

รวม Sorted Array ใน 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 และสิ้นสุด :=ความยาวของ A – 1
  • ในขณะที่สิ้นสุด>=0 และไม่ใช่ A[end],
    • จบ :=จบ – 1
  • ในขณะที่ j <ความยาวของ B
    • ถ้า 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 และฉัน
  • 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]