问题标题: 酷町堂:4830

0
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
张恩泽
张恩泽
高级天翼
高级天翼

第一个while里的第一个if只需要第一个条件,然后直接else,

里面是t[++ cnt] = c[j ++];

下面的就貌似没什么问题了

我要回答