lintcode-6-Merge Two Sorted Arrays 合并(归并)数组

1. 问题描述

Merge two given sorted ascending integer array A and B into a new sorted integer array.

2. my solution

2.1 我的思路

因为数组是有序的,那么从第一个元素开始对数组A,B进行逐个比较

  • 如果有一个数组比较完那么就把剩下的那个数组的元素都安次序给放到数组中

2.2 代码实现

class Solution {
public:
    /**
     * @param A: sorted integer array A
     * @param B: sorted integer array B
     * @return: A new sorted integer array
     */
    vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
        // write your code here
        int a = A.size();
        int b = B.size();
        int ai = 0;
        int bi = 0;
        int i = 0;
        vector<int>  v;
        
        
        
        
        while(ai<a && bi<b)
            if(A[ai]>B[bi])
                v[i++] = B[bi++];
            else
                v[i++] = A[ai++];
        while(ai<a)
            v[i++] = A[ai++];
        while(bi<b)
            v[i++] = B[bi++];
        
        
        return v;
    }
};

2.3 运行结果

虽然效果还可以, 但是基本处在中游的位置, 应该看看大佬们的代码学习一下
在这里插入图片描述

3. 别人的实现

3.1 思路一(较差)

时间复杂度: O ( n 1 ∗ n 2 ) O(n_1*n_2) O(n1n2)
空间复杂度 : O ( n 1 + n 2 ) O(n_1+n_2) O(n1+n2)

3.1.1 基本步骤
  1. 创建一个大小为z1+z2的数组arr3
  2. 复制arr1中的n1个元素到arr3中
  3. 遍历arr2插入元素, 需要 O ( n 1 ∗ n 2 ) O(n_1*n_2) O(n1n2)的时间

由于时间复杂度较高, 就不实现了

3.2 思路二(较好)

时间复杂度: O ( n 1 + n 2 ) O(n_1+n_2) O(n1+n2)
空间复杂度 : O ( n 1 + n 2 ) O(n_1+n_2) O(n1+n2)

步骤如下

  1. 创建一个大小为n1+n2的数组arr3
  2. 同时遍历arr1[] 与 arr2[]
    • 选择较小的元素从头开始插入到arr3中
  3. 如果arr1 与arr2中还有剩余元素, 则全部复制到arr3中

可以看到这个方法与我的思路只差了一步创建大小为n1+n2的数组, 但是

下面的图片是一个示例
在这里插入图片描述

3.2.1 代码实现
public class Solution {
    /**
     * @param A: sorted integer array A
     * @param B: sorted integer array B
     * @return: A new sorted integer array
     */
    public int[] mergeSortedArray(int[] A, int[] B) {
        // write your code here
         int[] answer = new int[A.length + B.length];
        int i = 0, j = 0, k = 0;
        while (i < A.length && j < B.length)  
           answer[k++] = A[i] < B[j] ? A[i++] :  B[j++];
        while (i < A.length)  
            answer[k++] = A[i++];
        while (j < B.length)    
            answer[k++] = B[j++];
        return answer;
    }
}
3.2.2 运行结果

可以看到效果很好, 奇怪的是, 后面我用C++实现的效率竟然不及java的一半?哪位大神可以在评论中解释一下
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值