首页 > 试题广场 >

有序序列合并

[编程题]有序序列合并
  • 热度指数:758 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

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

第一行包含两个正整数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
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)

问题信息

上传者:小小
难度:
1条回答 3300浏览

热门推荐

通过挑战的用户

有序序列合并