两个有序数组合并成一个有序数组


[注意]把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