精华内容
下载资源
问答
  • 两个有序数组合并

    2018-12-03 10:48:22
    1124: 两个有序数组合并 时间限制: 1 Sec 内存限制: 128 MB 提交: 8452 解决: 3117 [提交] [状态] [讨论版] [命题人:admin] 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,...

    1124: 两个有序数组合并

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 8452  解决: 3117
    [提交] [状态] [讨论版] [命题人:admin]

    题目描述

    已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。

     

    输入

    输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。

     

    输出

    输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。

     

    样例输入

    <span style="color:#333333">4 1 2 5 7
    3 6 4 2
    </span>

     

    样例输出

    <span style="color:#333333">7 6 5 4 2 2 1
    </span>

     

    提示

    试图排序的孩子们要小心了~~~~~~

     

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    bool cmp(int a, int b)
    {
    	return a>b;
    }
    int a[1000003];
    int b[1000003];
    int c[1000003];
    int main()
    {
    	int m;
    	int n;
    	scanf("%d",&m);
    	int i;
    	for(i=0; i<m; i++)
    	{
    		scanf("%d",&a[i]);
    		c[i] = a[i];
    	}
    	scanf("%d",&n);
    	for(i=m; i<m+n; i++)
    	{
    		scanf("%d",&b[i]);
    		c[i] = b[i];
    	}
    	sort(c, c+m+n, cmp);
    	for(i=0; i<m+n; i++)
    	{
    		printf("%d%c",c[i],i==m+n-1?'\n':' ');
    	}
    	
    	return 0;
    }

     

    展开全文
  • 今天小编就为大家分享一篇java实现把两个有序数组合并到一个数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 数组合并在找工作中笔试和面试都是常遇到的问题,实际上这个主要可以分为两大类进行解决。第一类就是这两个数组都是有序的数组,第二类是这两个数组都是无需数组。...而对于两个有序数组合并的问...

    数组合并在找工作中笔试和面试都是常遇到的问题,实际上这个主要可以分为两大类进行解决。第一类就是这两个数组都是有序的数组,第二类是这两个数组都是无需数组。

    第一类问题解决的时候稍微有些复杂,而第二类问题就比较简单。如果是两个无序数组进行合并,我们可以在次创建一个数组。并且这个新数组的长度是两个无序数组长度之

    和。然后对这个新的数组进行一次排序就可以了,本篇文章主要使用冒泡排序。而对于两个有序数组合并的问题来说,我们就要考虑几种情况。第一种情况就是如果其中某一个数组的第一个元素比另外一个数组的最后一个元素大,那么就可以直接直接放到后面。第二种情况,就是两个数组进行一个一个比较,但如果其中有一个数组的元素已经遍历完了,而另外一个没有。

    一.两个无序数组合并问题

    /**

    * 合并两个无序的数组

    */

    public class Test2 {

    public static void main(String[] args) {

    int[] array1={2,1,90,7,4,9};

    int[] array2={3,12,45,23,56};

    merge(array1,array2);

    }

    public static void merge(int[] array1,int[] array2){

    //定义一个变量

    int j=0;

    //定义一个新的数组

    int[] result=new int[array1.length+array2.length];

    for (int i = 0; i < array1.length; i++) {

    result[j++]=array1[i];

    }

    for (int n = 0; n < array2.length; n++) {

    result[j++]=array2[n];

    }

    //使用冒泡排序

    for (int i = 0; i < result.length-1; i++) {

    for (int n = 0; n < result.length-1-i; n++) {

    int temp=0;

    if(result[n]>result[n+1]){

    temp=result[n+1];

    result[n+1]=result[n];

    result[n]=temp;

    }

    }

    }

    //进行遍历输出

    for (int i = 0; i < result.length; i++) {

    if(i==result.length-1){

    System.out.print(result[i]+"]");

    }else if (i==0){

    System.out.print("["+result[i]+",");

    }else {

    System.out.print(result[i]+",");

    }

    }

    }

    }

    二.两个有序数组合并问题

    import java.util.ArrayList;

    /**

    * 将两个数组有序数组合并为一个有序数组

    */

    public class Test {

    public static void main(String[] args) {

    //int[] array1={1,2,3,4};

    //int[] array1={1,3,5,7,9,13}int[] array2={5,6,7,8,9};;

    int[] array1={1,3,5,7,9,13};

    int[] array2={2,4,6,8,10,12};

    merge(array1,array2);

    }

    /**

    *

    * @param array1

    * @param array2

    */

    public static void merge(int[] array1,int[] array2){

    //定义两个变量

    int i=0;

    int j=0;

    int k=0;

    //在创建一个数组

    int[] result=new int[array1.length+array2.length];

    //如果数组arry1的第一个元素比array2最后一个元素大,那就直接把arry1数组元素放到array2后面

    if(array1[0]>array2[array2.length-1]){

    for (int m = 0; m < array2.length; m++) {

    result[k++]=array2[m];

    }

    for (int m = 0; m < array1.length; m++) {

    result[k++]=array1[m];

    }

    }

    //如果array2的第一个元素比array1的最后一个元素大,那么直接把array2的元素放到array1的后面

    else if (array2[0]>array1[array1.length-1]){

    for (int m = 0; m < array1.length; m++) {

    result[k++]=array1[m];

    }

    for (int m = 0; m < array2.length; m++) {

    result[k++]=array2[m];

    }

    }

    else {

    while (i < array1.length && j < array2.length) {

    if (array1[i] < array2[j]) {

    //如果小就放到集合中

    result[k++] = array1[i];

    i++;

    } else {

    result[k++] = array2[j];

    j++;

    }

    }

    //如果array1都比较完了,剩下array2的就直接放到结果集中

    while (i == array1.length && j < array2.length) {

    result[k++] = array2[j++];

    }

    //如果array2都比较完了,剩下的array1就直接放到结果集中

    while (j == array2.length && i < array1.length) {

    result[k++] = array1[i++];

    }

    }

    //遍历输出所有的结果集

    bianli(result);

    }

    static void bianli(int[] result) {

    for (int s = 0; s< result.length; s++) {

    if(s==result.length-1){

    System.out.print(result[s]+"]");

    }else if (s==0){

    System.out.print("["+result[s]+",");

    }else {

    System.out.print(result[s]+",");

    }

    }

    }

    }

    展开全文
  • 1124: 两个有序数组合并 时间限制: 1 Sec 内存限制: 128 MB 提交: 12599 解决: 4941 [状态] [讨论版] [提交] [命题人:admin] 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b...

    1124: 两个有序数组合并
    时间限制: 1 Sec 内存限制: 128 MB
    提交: 12599 解决: 4941
    [状态] [讨论版] [提交] [命题人:admin]
    题目描述
    已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。

    输入
    输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。

    输出
    输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。

    样例输入 Copy
    4 1 2 5 7
    3 6 4 2
    样例输出 Copy
    7 6 5 4 2 2 1
    提示
    试图排序的孩子们要小心了~~~~~~

    数据结构里方法讲的很清楚

    #include<stdio.h>
    int main()
    {
    	int a[1000],b[1000],c[10000];
    	int m,n,i,j,temp,k;
    	scanf("%d",&m);
    	for(i=0;i<m;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		scanf("%d",&b[i]);
    	}
    	for(i=0,j=m-1;j>i;i++,j--)//将数组a逆序
    	{
    		temp=a[j];
    		a[j]=a[i];
    		a[i]=temp;
    	}
    	i=j=k=0;
    	while(i<m&&j<n)//公共部分比较排序
    	{
    		if(a[i]>b[j])
    		{
    			c[k]=a[i];
    			k++;
    			i++;
    		}
    		else
    		{
    			c[k]=b[j];
    			k++;
    			j++;
    		}
    	}
    	while(i<m)//数组a有剩余,把剩余部分接入数组c
    	{
    		c[k]=a[i];
    		i++;
    		k++;
    	}
    	while(j<n)//数组b有剩余,把剩余部分接入数组c
    	{
    		c[k]=b[j];
    		j++;
    		k++;
    	}
    	for(k=0;k<m+n;k++)//输出数组c
    	{
    		printf("%d ",c[k]);
    	}
    	getchar();
    	printf("\n");
    	return 0;
    }
    			
    
    展开全文
  • 两个有序数组合并后求其中位数 给定两个有序数组 a[n], b[m].求其合并后的有序数组的中位数。 思路一 :  这个思路也是我第一时间想到的,但是效率并不好。时间复杂度O(n+m).相信大家也能知道,即主动合并两个两...

    两个有序数组合并后求其中位数

    给定两个有序数组 a[n], b[m].求其合并后的有序数组的中位数。

    思路一 :

      这个思路也是我第一时间想到的,但是效率并不好。时间复杂度O(n+m).相信大家也能知道,即主动合并两个两个数组,后取中位数。

      

    void Commbine(int *a, int*b, int sz_a, int sz_b)
    {
        if (a == NULL || b == NULL || (sz_a + sz_b > LEN))
            return;
        int a_point = sz_a - 1;
        int b_point = sz_b - 1;
        int new_point = sz_a + sz_b - 1;
        while (a_point >= 0 && b_point >= 0)
        {
            if (a[a_point] > b[b_point])
            {
                a[new_point--] = a[a_point--];
            }
            else
            {
                a[new_point--] = b[b_point--];
            }
        }
        while (a_point >= 0)
        {
            a[new_point--] = a[a_point--];
        }
        while (b_point >= 0)
        {
            a[new_point--] = b[b_point--];
        }
        return;
    }
    

    思路二: 

       这里允许我多说一句,现在才明白,做算法,数学基础有多重要。

     

    图示中阐明了一种思想,即合并后数组的中位数,一定在a 数组的中位数和 b 数组的中位数之间,假定a[中]  < b[中] , 

    截断开a[] 和 b[] , =(形成新的数组)=》a[中]~a[尾] (a1[]),b[首]~b[中] (b1[]); (反之取 b[]的后半段和a[]的前半段);

    当相等时,取此值为中位数;当一个数组取到尾或取到尽头但未相等,则取另一数组剩余部分 的中值。如此循环,直至相遇。

    时间复杂度为 o(log(m+n));

     

    展开全文
  • 例题 :查找两个有序数组合并后的中位数 【题目】 两个有序数组查找合并之后的中位数。给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组合在一起之后的中位数,并且要求算法的...
  • 实现两个有序数组合并为一个有序数组 test1 = [1,3,5,7,9] test2=[2,4,6,7,10,11,34,55] def mergetest(test1,test2): result=[ ] len1=len(test1) len2=len(test2) ...
  • 两个有序数组合并成一个有序数组 Golang实现 */ func main() { fmt.Println("Hello World!") var a = []int{1, 3, 5, 7, 9} var b = []int{0, 2, 4, 6, 8} c := sortArr(a, b) for i, v :=...
  • 两个有序数组合并为一个有序数组,例如: 数组A:1,2,2,3,5,6,7,7 数组B:1,2,4,5,8,8,9,10,11,12,12,13,14 合并后应该为: 1, 1, 2, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 12, 12, 13, 14 ...
  • 两个有序数组合并成有序数组

    千次阅读 2017-02-07 16:53:51
    昨天面试遇到了这样一个问题,怎样把两个有序数组合并成有序数组呢?我傻傻的是这么回答的:创建一个可变数组,把两个数组放入可变数组之后再进行排序。想想考官当时都会觉得搞笑,考官当时心里应该是这么想的,你的...
  • 1124: 两个有序数组合并 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。 输入 输入有两行,第一行首先是一个正整数m,然后是m个整数;第二...
  • 两个有序数组合并 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。 输入 输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先...
  • 主要介绍了iOS常用算法之两个有序数组合并(要求时间复杂度为0(n)),实现思路是先将一个数组作为合并后的数组, 然后遍历第二个数组的每项元素,需要的朋友可以参考下
  • 面试常用的算法题:两个有序数组合并
  • 本文主要向大家介绍了java语言实现把两个有序数组合并到一个数组的实例,通过具体的代码向大家展示,希望对大家学习java语言有所帮助。如下所示:packagecom.test.sort;publicclasstestMerge{publicstaticvoidmain...
  • 两个有序数组合并成一个有序数组

    千次阅读 2014-12-12 16:34:56
    两个有序数组合并成一个有序数组 1. 题目描述 数组a是有序的,数组b也是有序的,如何高效地合并它们成一个数组,并且新数组也是有序的? 2. 从后往前合并 这道题目是师兄电面阿里的时候,问到的一道题目。...
  • ZZULIOJ.1124: 两个有序数组合并

    千次阅读 2018-11-19 18:43:22
    1124: 两个有序数组合并 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。 输入 输入有两行,第一行首先是一个正整数m,然后是m个整数;第二...
  • 怎样把两个有序数组合并成有序数组呢  逻辑步骤:  1.假设两个数组为A和B  2.A和B都是从小到大的顺序进行排列  **  1.我们可以直接比较两个数组的首元素,哪个小就把这个小元素放入可变数组。 ...
  • 默认一般会采用数组先合并,在排序 时间复杂度会在o(n) -o(n*n) 之间 我想了个其他的思路 对数组1 和数组2 元素从头开始进行一次对比,小的放入结果集合, ... * 两个有序数组合并到 一个新排序数组 * ...
  • 两个有序数组合并成一个新的有序数组,不用系统的API,其实有多种方法可以实现。 1.先把两个有序数组合并成一个新的数组,再进行排序,使其成为一个新的有序数组,此方法程序可以运行,但应该不算是最优的方法。 ...
  • /** * / /* @author jueying: ... * 把两个有序数组合并成一个有序数组,实现算法的复杂度为n * * 同理如果想要数组中的元素只移动一次,原理和字符串中空格代替是一个思想,采用从后面开始复...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 772
精华内容 308
关键字:

两个有序数组合并