俺油来问问题力

9. 合并有序数组

题目ID:1206100分

时间限制: 200ms

空间限制: 524288kB

题目描述

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)。

1 个赞

私你。

1 个赞

东西呢

1 个赞

@王涵颖 @王涵颖 @王涵颖 @王涵颖 @王涵颖 @王涵颖

1 个赞

发你了,你没看见吗

1 个赞

NO

1 个赞

因为只有聪明的人才能看见我的答案

1 个赞

但是我是盲人

1 个赞

?不是哥们

1 个赞

(jiade)

1 个赞

。。。

1 个赞

新建指针变量i1i2,当a[i1]>b[i2]时输出i1并自增,否则输出i2并自增.直到i1等于a的长度与i2等于b的长度

1 个赞

这是会死循环的

1 个赞

cmp部分

int cmp(int a,int b){ //比大小函数 
	return a>b; //从大到小 
}

核心代码

while(scanf("%d",&a[i])){ //输入a 
		if(a[i]==-1)
		  break;
		i++;
	}
	while(scanf("%d",&a[i])){ //将输入的第二个数组加到a后面 
		if(a[i]==-1)
		  break;
		i++;
	}
	sort(a,a+i,cmp); //库函数sort进行从大到小排序 
	for(int j=0;j<(i-1);j++) //遍历输出 
	  cout<<a[j]<<" ";

AC给解决方案

1 个赞

我表达不清晰,应该是到i1等于a的长度或i2等于b的长度,再输出剩下的

2 个赞

不会T,但是题目说了不能使用排序

2 个赞

为什么RE了

2 个赞

printf(“%d”,a[j]);

试试

1 个赞

这么大达到了吗?

1 个赞

达到了呀

1 个赞