Java 水题系列(4)数组合并

时间:2022-07-26
本文章向大家介绍Java 水题系列(4)数组合并,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

数组合并

思路:归并排序就是借用这一算法与分治才达到了nlogn的复杂度,所谓合并就是双指针法,小的就加进去,然后指针跳一个,最后肯定有一个数组的指针还没指到头,遍历一遍就是,很优秀的复杂度o(n+m)

/** 

 * @Title: d.java

 * @Description: TODO

 * @author 菱形继承

 * @date 2020-03-31 03:28:16

 */



/** 

 * @ClassName: d

 * @Description: TODO

 * @author 菱形继承

 * @date 2020-03-31 03:28:16

*/



import java.util.*;

public class d {

    public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);

        int len1=sc.nextInt(),len2=sc.nextInt();

        int[] list1,list2,list;

        list1=new int[len1];list2=new int[len2];list=new int[len1+len2];

        for(int i=0;i<len1;i++)list1[i]=sc.nextInt();

        for(int i=0;i<len2;i++)list2[i]=sc.nextInt();

        list=merge(list1,list2);

        for(int i=0;i<len1+len2;i++)

        {

            System.out.print((i==len1+len2)?list[i]:list[i]+" ");

        }

    }

    public static int[] merge(int []list1,int []list2)

    {

        int len1=list1.length,len2=list2.length;

        int[] list= new int[len1+len2];

        int i=0,j=0,cnt=0;

        while(i<len1&&j<len2)

        {

            if(list1[i]<=list2[j])

            {

                list[cnt++]=list1[i];

                i++;

            }

            else

            {

                list[cnt++]=list2[j];

                j++;

            }

        }

        while(i<len1)

        {

            list[cnt++]=list1[i];

            i++;

        }

        while(j<len2)

        {

            list[cnt++]=list2[j];

            j++;

        }

        //System.out.println(cnt);

        return list;

    }

}

运行结果: