首页 > 试题广场 > 有序序列合并
[编程题]有序序列合并
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入描述:
输入包含三行,

第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数(范围1~5000),用空格分隔。

第三行包含m个整数(范围1~5000),用空格分隔。


输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1

输入

5 6
1 3 7 9 22
2 8 10 17 33 44

输出

1 2 3 7 8 9 10 17 22 33 44
//
// Created by yuanhao on 2019-9-16.
//
 
#include <iostream>
 
using namespace std;
 
int main() {
    int n;
    int m;
    cin >> n >> m;
    int a[n];
    int b[m];
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    for (int i = 0; i < m; ++i) {
        cin >> b[i];
    }
    int len = n + m;
    int index = 0;
    int ai = 0;
    int bi = 0;
    while (index < len) {
        if (ai == n) {
            cout << b[bi] << " ";
            bi++;
        } else if (bi == m) {
            cout << a[ai] << " ";
            ai++;
        } else if (a[ai] > b[bi]) {
            cout << b[bi] << " ";
            bi++;
        } else {
            cout << a[ai] << " ";
            ai++;
        }
        index++;
    }
    cout << endl;
    return 0;
}

发表于 2019-09-16 10:03:23 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = 0,m = 0;
        if(sc.hasNext()){
            n = sc.nextInt();
            m = sc.nextInt();
        }
        int[] arr1 = new int[n];
        int[] arr2 = new int[m];
        for(int i = 0; i < n; i++){
            arr1[i] = sc.nextInt();
        }
        for(int j = 0; j < m; j++){
            arr2[j] = sc.nextInt();
        }
        int[] res = getSortedRes(arr1,arr2);
        for(int i : res){
            System.out.print(i + " ");
        }
    }
    
    public static int[] getSortedRes(int[] arr1, int[] arr2){
        if(arr1==null||arr2==null){
            return null;
        }
        int len1 = arr1.length;
        int len2 = arr2.length;
        int[] help = new int[len1+len2];
        int i = 0, j = 0, k = 0;
        while(i<len1&&j<len2){
            if(arr1[i]<arr2[j]){
                help[k++] = arr1[i++];
            }else{
                help[k++] = arr2[j++];
            }
        }
        while(i<len1){
            help[k++] = arr1[i++];
        }
        while(j<len2){
            help[k++] = arr2[j++];
        }
        return help;
    }
}
发表于 2019-09-15 22:17:36 回复(0)
n,m = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
c = a+b
c.sort()
res = ""
for i in c:
    res +=str(i)+" "
print(res.strip())

发表于 2019-09-12 15:22:56 回复(0)
let inputNum = readline().split(' ');
let N = parseInt(inputNum[0]);
let M = parseInt(inputNum[1]);
let listN = readline().split(' ');
let listM = readline().split(' ');
let newList = [];
for(let i=0; i<N; i++){
    while(listM.length && parseInt(listN[i])>parseInt(listM[0])){
        newList.push(listM.shift());
    }
    newList.push(listN[i]);
}
while(listM.length){
    newList.push(listM.shift());
}
print(newList.join(' '));

发表于 2019-09-12 14:05:26 回复(0)