1.合并两个数组,并保持仍然有序。2.删除合并后数组中的重复元素

Posted 王朝马汉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.合并两个数组,并保持仍然有序。2.删除合并后数组中的重复元素相关的知识,希望对你有一定的参考价值。

 1 #include <stdio.h>
 2 /*
 3 题目:1.合并两个有序数组到第三个中去,并使其依然保持有序  2.删除重复的元素
 4 思路:a.分别测出二个数组的长度,将两个数组的长度之和作为第三个数组的长度
 5       b.比较二个数组元素的大小,小的放入第三个数组,直至某一个数组为空,将另外一个不为空的数组剩下的元素追加到第三个数组
 6         后面即可
 7       c.删除重复的元素。另外定义一个数组,长度<=当前数组,但是不知道具体有几个重复的元素,所以长度设置成原数组的长度。
 8       d.原数组的第一个元素不用比较,直接放进第二个数组中的第一个元素中。原数组的第二个元素和第一个元素如果相同,不用放入第二个数组
 9         如果不同放入第二个数组
10 */
11 #define M 4
12 #define N 6
13 int main(void)
14 {
15     int a[M] = {1,2,3,4};
16     int b[N] = {2,3,5,6,7,8};
17     
18     int c[M+N],i,j,k;
19     i = j = k = 0;
20     
21     while(i<M&&j<N)//如果一个数组为空就退出循环    
22     {
23         if(a[i]<=b[j])
24             c[k++] = a[i++];
25         else
26             c[k++] = b[j++];
27     }
28     while(i<M)//a数组不为空
29         c[k++] = a[i++];    
30     while(j<N)//b数组不为空
31         c[k++] = b[j++];
32     for(k = 0;k<M+N;k++)
33     {
34         printf("%d\t",c[k]);
35     }
36     putchar(10);
37     
38     printf("--------------删除重复的元素----------------\n");
39     int d[M+N];
40 
41     d[0] = c[0];//第一个元素直接放入第二个数组
42     i = 1,j = 1;
43     while(i<M+N)
44     {
45         if(c[i] != c[i-1])
46         {
47             d[j++] = c[i];//如果不同放入第二个数组。
48         }
49         i++;
50     }
51 
52     for(i = 0;i<j;i++)
53     {
54         printf("%d\t",d[i]);
55     }
56     putchar(10);
57     return 0;
58 }

 

以上是关于1.合并两个数组,并保持仍然有序。2.删除合并后数组中的重复元素的主要内容,如果未能解决你的问题,请参考以下文章

输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。

小C秋招面试算法题:合并k个有序数组合并k个有序链表(分治思想)

小C秋招面试算法题:合并k个有序数组合并k个有序链表(分治思想)

小C秋招面试算法题:合并k个有序数组合并k个有序链表(分治思想)

# 88. 合并两个有序数组

Matlab两个一维数组合并为一个数组?