题目:
描述:已知两非递减的顺序线性表,要求合并
成一个新的非递减顺序线性表。
输入:输入包含四行,第一行为自然数n,表示第一个非递减顺序线性表的长度,第二行为n个自然数构成的非递减顺序线性表,第三行为自然数m,表示第二个非递减顺序线性表的长度,第四行为m个自然数构成的非递减顺序线性表。
输出:用一行输出合并后的非递减顺序线性表,各数之间用一个空格隔开。
样例输入:
2
1 3
3
2 3 6
样例输出:
1 2 3 3 6
代码:
方法一:
import java.util.*;
public class Xingyuxingxi {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int []sum=new int[10010];//定义一个稍微大一点的数组
int a1;
for (int i = 0; i < a; i++) {
a1= sc.nextInt();
sum[a1]++;//用下标储存数
}
int b=sc.nextInt();
int b1;
for (int i = 0; i < b; i++) {
b1 = sc.nextInt();
sum[b1]++;//用下标储存数
}
for(int i=0;i<10010;) {//遍历整个数组
if(sum[i]!=0) {//数组中每存一个值代表,这个数出现了几次,需要输出这个数,然后值-1
System.out.print(i + " ");
sum[i]--;
}
else {//等于0代表输出完了,接着遍历数组,下标+1
i++;
}
}
}
}
方法二:
import java.util.*;
public class Xingyuxingxi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int []c=new int[10010];//定义一个比较大的数组
int a = sc.nextInt();
for (int i = 0; i < a; i++) {
c[i]=sc.nextInt();//将第一组数据存入数组中
}
int b = sc.nextInt();
for (int i = a; i < a+b; i++) {
c[i]=sc.nextInt();//将第二组在第一组书局后,依次存入数组中
}
Arrays.sort(c,0,a+b);//用自带的sort方法从小到大排序
for (int i = 0; i < a+b; i++) {
System.out.print(c[i]+" ");//最后依次输出
}
}
}
文章介绍了两种方法来合并两个给定的非递减顺序线性表,一种是使用哈希表存储每个数字出现的次数,另一种是先合并再对数组进行排序。展示了Java代码实现。

被折叠的 条评论
为什么被折叠?



