带你刷 · C语言 | 有序序列合并

简介: 问:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。数据范围:`1≤n`,`m≤1000` ,序列中的值满足`0≤val≤30000`

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....

题目

问:
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

数据范围:1≤nm≤1000 ,序列中的值满足0≤val≤30000

输入描述:
输入包含三行

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

第二行包含n个整数,用空格分隔

第三行包含m个整数,用空格分隔

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

示例
输入
5 6
1 3 7 9 22
2 8 10 17 33 44

输出
1 2 3 7 8 9 10 17 22 33 44


解法

1. 确定思路

  • 当然,有一个简单的思路,就是另外定义一个数组,把这两个序列的元素全部存进去,然后再进行排序
  • 但是一旦涉及到排序,时间复杂的就会上去
  • 这边提供一个思路,就是用空间换时间
  • 先定义两个数组分别存储这两个序列,然后用两个指针分别遍历这两个数组,指针走一步比较一次各自指向的值的大小
  • 谁指向的值小,就先把那个值打印出来,然后该指针+1,另外一个指针先不动,一次次进行比较

2. 编写代码

  • 根据上述思路,直接用数字下标代替指针,对比索引值的大小,小的先打印,打印完下标+1

在这里插入图片描述

对应代码:
        if(a[x]<b[y])
        {
            printf("%d ",a[x]);
            x++;
        }
        else
        {
            printf("%d ",b[y]);
            y++;
        }
  • 一次一次对比...当其中一个下标遍历完数组后退出循环

在这里插入图片描述

对应代码:
    while(x<n && y<m)
    {
        if(a[x]<b[y])
        {
            printf("%d ",a[x]);
            x++;
        }
        else
        {
            printf("%d ",b[y]);
            y++;
        }
    }
  • 另外一个下标还得继续遍历打印数组,直接打完即可
对应代码:
    if(x==n)
    {
        for(;y<m;y++)
            printf("%d ",b[y]);
    }
    else
    {
        for(;x<n;x++)
            printf("%d ",a[x]);
    }
  • 试试看最终的功能:

在这里插入图片描述


在这里插入图片描述

相关文章
|
Web App开发 安全 Java
开源漏洞扫描工具(OWASP-Dependency-Check)探索
背景 随着公司逐渐发展壮大,网络信息安全变得越来越重要。由此激发了我们成立兴趣小组(凯京爆破小组)研究网络信息安全的欲望。然而信息安全的防范,还得从底层编码开始做起。这样依赖性扫描工具(OWASP-Dependency-Check)就进入了我们的视线,既符合我们当前的需求又使用方便简单,自然而然的成为了我们探索的对象。
19626 0
|
11月前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁主要依靠一个SETNX指令实现的 , 这条命令的含义就是“SET if Not Exists”,即不存在的时候才会设置值。 只有在key不存在的情况下,将键key的值设置为value。如果key已经存在,则SETNX命令不做任何操作。 这个命令的返回值如下。 ● 命令在设置成功时返回1。 ● 命令在设置失败时返回0。 假设此时有线程A和线程B同时访问临界区代码,假设线程A首先执行了SETNX命令,并返回结果1,继续向下执行。而此时线程B再次执行SETNX命令时,返回的结果为0,则线程B不能继续向下执行。只有当线程A执行DELETE命令将设置的锁状态删除时,线程B才会成功执行S
|
存储 网络协议 定位技术
OSPF路由汇总:优化网络的强大工具
OSPF路由汇总:优化网络的强大工具
572 1
|
应用服务中间件 Linux 网络安全
在Linux中,如何配置Apache或Nginx Web服务器?
在Linux中,如何配置Apache或Nginx Web服务器?
|
开发框架 移动开发 前端开发
【Uniapp 专栏】Uniapp 与 React Native 的对比分析
【5月更文挑战第14天】Uniapp和React Native是热门的跨平台移动开发框架。Uniapp以其一套代码多端运行、丰富的组件生态和较低的学习曲线受到青睐,适合快速开发简单应用。React Native基于React,拥有活跃社区和优秀性能,适合复杂应用。React Native在性能上略胜一筹,尤其在需要接近原生体验的场景。Uniapp的官方组件弥补了社区资源不足。选择时需考虑开发效率、性能需求、团队技术栈和社区支持。
3286 1
【Uniapp 专栏】Uniapp 与 React Native 的对比分析
|
云安全 弹性计算 Kubernetes
玩转ECS第4讲 | 基于弹性计算网络能力提升容器密度最佳实践
云原生和容器化是主流的趋势,实现容器化时推荐大家使用云厂商的容器服务,如阿里云ACK。但由于部分用户因为一些原因需要自建容器,此时不得不面临一个问题,就是如何能够在一台宿主机上提升容器数量,降低容器成本。
玩转ECS第4讲 | 基于弹性计算网络能力提升容器密度最佳实践
Idea 如何新建一个groovy的项目(图文详细解释)
Idea 如何新建一个groovy的项目(图文详细解释)
740 1
|
边缘计算 物联网 Serverless
边缘计算组件功能介绍(二)
边缘计算组件功能介绍(二)
674 1
|
Ubuntu Java Linux
|
前端开发
React组件导入的两种方式(动态导入组件的实现)
React组件导入的两种方式(动态导入组件的实现)
597 0