0
已解决
李瑞曦
高级天翼
高级天翼
4830 合并多个有序数组
经验值:800 时间限制:1000毫秒
题目描述 Description
给出3个从小到大排序的有序数组,现在要将这3个数组合并成一个有序数组。
输入描述 Input Description
第一行,三个空格隔开的正整数,x y z
接下来3行,每行分别有x、y、z个空格隔开的正整数,分别为三个数组
输出描述 Output Description
一行,x+y+z个正整数,为3个有序数组合并成一个的结果
样例输入 Sample Input
3 3 3 1 2 3 2 3 4 3 4 5
样例输出 Sample Output
1 2 2 3 3 3 4 4 5
数据范围及提示 Data Size & Hint
x,y,z,x+y+z <= 1,000,000
-----------------------------------------------------------
OMG
为啥一直30分
求大佬帮助
我的代码:
#include<iostream>
using namespace std;
int a[1111111],b[1111111],c[1111111],t[11111111],cnt,x,y,z;
int main(){
cin>>x>>y>>z;
for(int i=1;i<=x;i++){
cin>>a[i];
}
for(int i=1;i<=y;i++){
cin>>b[i];
}
for(int i=1;i<=z;i++){
cin>>c[i];
}
int i=1,j=1,k=1;
while(i<=x&&j<=y&&k<=z){
if(a[i]<b[j]&&a[i]<c[k]){
t[++cnt]=a[i++];
}
else if(b[j]<c[k]){
t[++cnt]=b[j++];
}
else{
t[++cnt]=c[k++];
}
}
while(i<=x){
t[++cnt]=a[i++];
}
while(j<=y){
t[++cnt]=b[j++];
}
while(k<=z){
t[++cnt]=c[k++];
}
for(int i=1;i<=x+y+z;i++){
cout<<t[i]<<" ";
}
return 0;
}
李瑞曦在2021-04-22 20:33:00追加了内容
顶
0
已采纳
张易晨
新手光能
新手光能
可以换个思路,这是我的思路↓
先和合并前两个数组
再拿新数组与第三个数组合并
-----------------------------------------
至于你为什么错了,我来告诉你(你这个思路完整代码可能100多行)
你应该在第一个while循环的后面再加上几个循环↓
whie(i<=x&&j<=y)
{
.............
}
while(i<=x&&k<=z)
{
............
}
while(j<=y&&k<=z)
{
...........
}
懂?
(相信我,这个代码我写过,就得写好多行)
0