题解 | #合并两个有序的数组#(计算合并后长度,从后往前赋值,空间复杂度O(1))

合并两个有序的数组

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

1.声明一个额外空间。 空间复杂度O(n)

class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        vector<int> c(m+n);
        int i = 0, j = 0, k = 0;
        while(i < m && j < n){
            if(A[i] < B[j])c[k++] = A[i++];
            else c[k++] = B[j++];
        }

        while(i < m)c[k++] = A[i++];
        while(j < n)c[k++] = B[j++];

        i = 0;

        for(int x : c){
            A[i++] = x;
        }

    }
};
  1. 一个已知数组从后往前开始赋值,空间复杂度为O(1) 且代码短
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
       int i = m - 1, j = n -1, k = m + n - 1;
       while (i >= 0 && j >= 0){
           A[k--] = A[i] > B[j] ? A[i--] : B[j--];
       }
       while(j >= 0) A[k--] = B[j--];
    }
};
全部评论

相关推荐

有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务