美文网首页
[算法] - 合并N个有序数组

[算法] - 合并N个有序数组

作者: 夹胡碰 | 来源:发表于2021-03-22 10:12 被阅读0次

1. 代码

package com.jfp;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @author jiafupeng
 * @desc
 * @create 2021/3/17 16:59
 * @update 2021/3/17 16:59
 **/
public class Test4 {

    public static int[] merge(int[] arr1, int[] arr2) {
        int m = 0;
        int n = 0;
        int[] mergeArr = new int[arr1.length + arr2.length];

        int i = 0;
        while (m < arr1.length || n < arr2.length) {
            if(m >= arr1.length){
                mergeArr[i++] = arr2[n++];
            } else if(n >= arr2.length){
                mergeArr[i++] = arr1[m++];
            } else if(arr1[m] < arr2[n]){
                mergeArr[i++] = arr1[m++];
            } else {
                mergeArr[i++] = arr2[n++];
            }
        }

        return mergeArr;
    }

    public static int[] mergeAll(ArrayList<int[]> lists, int l, int r){
        if(l >= r){
            return lists.get(l);
        }

        int m = (l + r) /2;
        int[] left = mergeAll(lists, l, m);
        int[] right = mergeAll(lists, m+1, r);
        return merge(left, right);
    }

    public static void main(String[] args) {
        int[] arr1 = {2,3,5,20};
        int[] arr2 = {2,4,6,8,10,12};
        int[] arr3 = {1,9,11};
        ArrayList<int[]> list = new ArrayList<>();
        list.add(arr1);
        list.add(arr2);
        list.add(arr3);
        int[] merge = mergeAll(list, 0, list.size() -1);
        System.out.println(Arrays.toString(merge));
    }
}

2. 输出

[1, 2, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 20]

相关文章

  • 归并排序

    原理:将原序列划分为有序的n个序列,然后利用归并算法进行合并,合并之后即为有序序列。要点:分治,归并 将数组arr...

  • [算法] - 合并N个有序数组

    1. 代码 2. 输出

  • 对两个有序的数组进行合并

    1、算法描述: 有两个有序的整型数组arrayA,和arrayB,先要将它俩合并得到新的合并数组同样是有序的。示例...

  • 4. 两个有序数组的中位数

    给定两个有序数组 nums1 和 nums2,它们的大小分别是 m 和 n,返回它们合并后的数组的中位数。 算法的...

  • 【LeetCode】88.合并两个有序数组

    题目描述 88.合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 n...

  • 归并排序

    首先看两个有序数组的排序 归并算法:先拆分,直到只剩下一个值(本身为有序),再合并 稳定性:稳定时间复杂度:O(n...

  • 合并两个有序数组(C)

    合并两个有序数组,合并完之后仍有序:

  • 算法必知 --- 归并排序(优化与案例)

    算法描述 使用归并排序进行升序排列。 示例: 算法设计 基本思路:借助额外空间,合并两个有序数组,得到更长的有序数...

  • k路归并 O(nlogk)

    题目 假定有k个有序数组,每个数组中含有n个元素,您的任务是将它们合并为单独的一个有序数组,该数组共有kn个元素。...

  • 有序数组合并

    1、两个有序数组合并(产生新数组) 2、两个有序数组合并(返回原来某个数组)

网友评论

      本文标题:[算法] - 合并N个有序数组

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