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个有序链表(分治思想)