题解 | #合并两个有序的数组#

合并两个有序的数组

https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665

class Solution {
public:
    // 经典双指针
    // 但这个和之前面试遇到的最简单的合并还不太一样
    void merge(int A[], int m, int B[], int n) {
        
        // 先写个需要额外开辟数组空间的  O(n) O(n)
        // vector<int> ans(m+n);
        //这种情况下 优先把最大的元素填到A的后面  也是各自从最大的元素往前遍历
        int pt1 = m-1, pt2 = n-1;
        int cur = m+n-1;
        while(pt1>=0 && pt2>=0)
        {
            if(A[pt1]>B[pt2])
            {
                A[cur] = A[pt1];
                pt1--;
            }
            else
            {
                A[cur] = B[pt2];
                pt2--;
            }
            cur--;
        }

        
        while(pt1>=0)
        {
            A[cur] = A[pt1];
            pt1--;
            cur--;
        }

        while(pt2>=0)
        {
            A[cur] = B[pt2];
            pt2--;
            cur--;
        }

        // //再把 ans赋给 A
        // for(int i=0; i<m+n; ++i)
        // {
        //     A[i] = ans[i];
        // }
        
        
    }
};

根据题解 从后往前 空间复杂度为1

全部评论

相关推荐

monococonut:我体感,wxg 双非同学还蛮多的,是真的英雄不问出处
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务