首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将两个有序数组合并成一个有序数组?

如何将两个有序数组合并成一个有序数组?
EN

Stack Overflow用户
提问于 2011-05-11 09:13:58
回答 27查看 299.5K关注 0票数 172

这是我在一次采访中被问到的,这是我提供的解决方案:

代码语言:javascript
复制
public static int[] merge(int[] a, int[] b) {

    int[] answer = new int[a.length + b.length];
    int i = 0, j = 0, k = 0;
    while (i < a.length && j < b.length)
    {
        if (a[i] < b[j])
        {
            answer[k] = a[i];
            i++;
        }
        else
        {
            answer[k] = b[j];
            j++;
        }
        k++;
    }

    while (i < a.length)
    {
        answer[k] = a[i];
        i++;
        k++;
    }

    while (j < b.length)
    {
        answer[k] = b[j];
        j++;
        k++;
    }

    return answer;
}

有没有更有效的方法来做到这一点?

编辑:更正的长度方法。

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2011-05-11 09:19:50

这是一个小的改进,但是在主循环之后,当您到达另一个输入数组的末尾时,可以使用System.arraycopy来复制另一个输入数组的尾部。不过,这不会改变解决方案的O(n)性能特征。

票数 36
EN

Stack Overflow用户

发布于 2012-01-21 07:59:25

代码语言:javascript
复制
public static int[] merge(int[] a, int[] b) {

    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;
}

是更紧凑一点,但完全相同!

票数 119
EN

Stack Overflow用户

发布于 2011-05-11 09:18:36

任何可以改进的地方都是微优化,整个算法是正确的。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5958169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档