兩個有序數組合並成一個有序數組


[注意]把B數組合並到A數組之中
兩種思路

  1. 定義一個新數組,長度為兩個數組長度之和,將兩個數組都copy到新數組,然后排序。
class Solution:
    def merge(self , A, m, B, n):
        A[:] = sorted(A[:m] + B)
  1. 給兩個數組分別定義一個下標,最大長度是數組長度減一,按位循環比較兩個數組,較小元素的放入新數組,下標加一(注意,較大元素對應的下標不加一),直到某一個下標超過數組長度時退出循環,此時較短數組已經全部放入新數組,較長數組還有部分剩余,最后將剩下的部分元素放入新數組,大功告成。
class Solution:
    def merge(self, A, m, B, n):
        A_copy = A[:m]
        A[:] = []
        i,j = 0,0
        while i<m and j< n:
            if A_copy[i]<B[j]:
                A.append(A_copy[i])
                i += 1
            else:
                A.append(B[j])
                j += 1
    # 此時較短的數組已經遍歷過一遍。

        if i < m:
            A[i+j:] = A_copy[i:]
        if j < n:
            A[i+j:] = B[j:]
        # else:
        #     result = result + A[i:]
    # print(i,j,len(list1),list1[i:],list2[j:])
        return A

s= Solution()
A=[]
m=0
B=[1]
n=1
print(s.merge(A,m,B,n))

https://leetcode-cn.com/problems/merge-sorted-array/
https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665?tpId=188&&tqId=36520&rp=1&ru=/ta/job-code-high-week&qru=/ta/job-code-high-week/question-ranking


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM