你们在上学而我在做一只快乐的小羊

好了回归正题

合并有序数组

题目

BH. 合并有序数组

Problem ID: 1206

Contest ID: 5697

必做题

Time Limit:1s Memory Limit: 256M

Description:

假设有两个非递增序列 A 与 B ,要求将它们合并为一个非递增序列 C 。

(不可使用任何排序算法完成)

Input:

第一行输入第一个非递增序列,以-1结尾。

第二行输入第二个非递增序列,以-1结尾。

Output:

输出合并后的非递增序列

Sample input:

8 5 4 -1
7 6 3 1 -1

Sample output:

8 7 6 5 4 3 1

约束: 每个序列中元素个数最多不超过100000 ,所有数字都在带符号的 32 位整数范围内(signed 32-bit integers)。

其实也有很认真看过tyx的解答


蠢笨如猪的我发现当时上课似乎。。

走神了!

所以dalao们
\Huge 救救孩子吧!!!

3 个赞

那里的?

2 个赞

我连题目什么意思都不懂

2 个赞

好简单

2 个赞

就是用一个数组把数字存起来(-1除外)
然后排序输出就好了

摘要

恭喜发财解决方案拿来

2 个赞

她人好像不在

2 个赞

啊对对对

2 个赞

666

2 个赞

啊这…

2 个赞

由于是有序的那就可以这样

#include<bits/stdc++.h>
using namespace std;
int a[1000001],b[1000001],c[1000001],i=1,j=1,n,m,t;
int main()
{
	cin>>a[1];
	while(a[n+1]!=-1)
	{
		n++;
		cin>>a[n+1];
	}
	cin>>b[1];
	while(b[m+1]!=-1)
	{
		m++;
		cin>>b[m+1];
	}
	while(t!=n+m)
	{
		if(a[i]>=b[j]&&i<=n) c[++t]=a[i++];
		else if(j<=m) c[++t]=b[j++];
	}
	for(i=1;i<=t;++i) cout<<c[i]<<" ";
	return 0;
}
2 个赞
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[10001]={0},i=0,b[10001]={0},j=0,x=0,y=0;
	while(scanf("%d",&a[i])){ //输入a数组 
		if(a[i]==-1) //如果是-1就退出 
		  break; //退出 
		i++; //下标加一 
	}
	while(scanf("%d",&b[j])){ //输入b数组 
		if(b[j]==-1) //如果是-1就退出 
		  break; //退出 
		j++; //下标加一  
	}
	while(1){ //双指针循环 
		if(a[x]>b[y]){ //如果大于 
			cout<<a[x]<<" "; //输出大的 
			x++; //将x指向a数组的下一个元素 
		}
		else if(a[x]<b[y]){ //如果小于 
			cout<<b[y]<<" "; //输出更大的b[y] 
			y++; //将y指向b数组的下一个元素 
		}
		else{ //如果相等 
			cout<<a[x]<<" "<<b[y]<<" "; //两者都输出 
			x++; //将x指向a数组的下一个元素 
			y++; //将y指向b数组的下一个元素 
		}
		if(x==i&&y==j) //如果长度达到要求 
		  break; //退出 
	}
	return 0;
}
1 个赞