美文网首页
合并两个升序数组

合并两个升序数组

作者: 追梦小蜗牛 | 来源:发表于2019-11-29 22:45 被阅读0次
three-pink-green-and-yellow-houses-2904142.jpg

需求:

已知两个升序的数组,合并他们,生成一个新的升序数组,不借助于其他API实现。

分析:

1、首先肯定需要定义一个新的数组空间,在已知的数组上做修改不现实,因为数组不擅长做插入和删除。
2、用原始的方法实现,也就是比较的方法,是一个笨方法,也是一个有效的办法。
3、涉及到三个数组,三个下标变量。
4、可以采用循环和递归两种方式来实现。

源码实现:

1、循环实现

    public static void main(String[] args) {
        int[] a = {1, 3, 6};
        int[] b = {2, 4, 5, 7, 9};
        int[] c = new int[a.length + b.length];
        circulate(a, b, c);
        for (int x : c) {
            System.out.println(x);
        }
    }

    public static void circulate(int[] a, int[] b, int[] c) {//循环实现
        int i = 0, j = 0, k = 0;
        while (i < a.length && j < b.length) {//两个数组都还没有遍历结束,长度短的会先遍历完,触发这个条件不满足
            if (a[i] < b[j])
                c[k++] = a[i++];
            else
                c[k++] = b[j++];
        }
        while (i < a.length) {//b数组已经遍历结束,把a数组剩余的元素迭代赋值给新数组
            c[k++] = a[i++];
        }

        while (j < b.length) {//a数组已经遍历结束,把b数组剩余的元素迭代复制给新数组
            c[k++] = b[j++];
        }
    }

2、递归实现

    static int[] a = {1, 3, 6};
    static int[] b = {2, 4, 5, 7, 9};
    static int[] c = new int[a.length + b.length];
    static int k = 0, i = 0, j = 0;

    public static void main(String[] args) {
        recursive(i, j);
        for (int x : c) {
            System.out.println(x);
        }
    }

    public static void recursive(int i, int j) {//递归实现
        if (i + j == a.length + b.length)//终止条件
            return;
        if (i < a.length && j < b.length) {
            if (a[i] < b[j])
                c[k++] = a[i++];
            else
                c[k++] = b[j++];
        } else {
            if (i < a.length)
                c[k++] = a[i++];

            if (j < b.length)
                c[k++] = b[j++];
        }

        recursive(i, j);
    }

总结:

做算法题的过程中,一定要有耐心,用笔在纸上一步一步的写着可能的解决方案。然后,根据写的思路,抽象、归纳出通用的算法。坚持做下去,收获肯定会颇丰的。

相关文章

  • 合并两个升序数组

    需求: 已知两个升序的数组,合并他们,生成一个新的升序数组,不借助于其他API实现。 分析: 1、首先肯定需要定义...

  • 链表题目合集

    23. 合并K个升序链表 给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并...

  • 2021-07-07 合并俩个有序数组

    如标题,给定俩个升序数组,要求合并为一个升序数组,最小复杂度 [1,3,6] [2,7,8] 合并后为[1,2,3...

  • Median of Two Sorted Arrays

    题目 有两个升序排列的数组nums1和nums2,现在要求出它们合并以后有序数组的中间下标的那个值。如果合并以后的...

  • 数据结构与算法之合并排序数组 II

    合并两个有序升序的整数数组A和B变成一个新的数组。新数组也要有序。 样例样例 1: 输入: A=[1], B=[1...

  • Day16 合并K个升序链表

    给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 https:...

  • leetcode--23--合并K个升序链表

    题目:给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 ...

  • LeetCode-23-合并K个升序链表

    给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。image.pn...

  • 23. 合并K个升序链表

    题目 给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 解题思路...

  • 两个有序数组如何合并成一个有序数组

    我这里考虑的两个数组均是升序排序,当然降序的两个数组进行合并算法是类似的。 下面有两段相似的代码,第一段除了返回合...

网友评论

      本文标题:合并两个升序数组

      本文链接:https://www.haomeiwen.com/subject/qklnwctx.html