算法小知识----10.02----合并两个有序数组

112 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

这算是一个在面试的时候遇上的实战题,面试的是一个网易的测试外包,但是面试的是网易的人员;当时给了我这一道实战题,当初没能想出来,所以写不出来,如今算是做一个回顾

题目

给定两个有序数组,请将他们合并成一个有序数组

思路

  • 抛开其他条件来说,两个数组合并,然后重新排序
  • 首先,两个数组合并成一个数组
  • 其次重新排序
  • 额外条件,因为整合的两个数组是有序的,数组之间是已经排好序的,所以这个算是对整个提纲代码的优化

编码

  • 编码的逻辑优化
    • 定义一个数组,长度为两个数组的长度之和
    • 定义双指针,分别指向两个数组的起点
    • 循环新数组,判断情况
      • 如果当前指针在数组A、数组B范围内的,那么再度比较两个数组的值的大小并填充。
      • 如果指针超出数组A、或者数组B的话,那么只需要对还在范围内的数组进行直接填充即刻。
public static int[] mergeArray(int[] a,int[] b){
    int[] c = new int[a.length+b.length];
    int d = 0;
    int e = 0;
    for (int i = 0; i < c.length; i++) {
        if (d<a.length && e<b.length){
            if (a[d]>b[e]){
                c[i] = b[e];
                e++;
            }else {
                c[i] = a[d];
                d++;
            }
        }else if (d<a.length){
            //当arr b已经遍历完后
            c[i] = a[d];
            d++;
        }else if (e<b.length){
            //当arr a已经遍历完
            c[i] = b[e];
            e++;
        }
    }
    return c;
}

学无止境,刷题也只要熟能生巧,才能达到应付自如。