牛客网BC100有序序列合并

news2024/11/18 8:17:52

思路:

运用归并排序
假设给定我们两个都是升序的数组,要求我们要把这两个数组以升序的方式合并到一个数组中,则我们就可以在这两个数组中分别各拿取一个元素进行比较,将二者之间较小值先放在这个新数组中,以此类推。

例子:{3,5}和{4,7}

第一步:3和4先比(因为两个数组都已经是升序了,所以第一个元素一定是该数组最小的元素)
3比4小,则将3放进数组——{3}

第二步:4和5再比,4比5小,则将4放进数组——{3,4}

第三步:5和7再比,5比7小,则将5放进数组——{3,4,5}

第四步:另外一组数组没有元素可以和7比了,那么就将7放进数组——{3,4,5,7}

有了思路我们就要考虑特殊情况

第一个问题:如果两个数组长度不一样长,等到有一个数组的元素全部用完都放进新数组里面,那接下来该怎么比呢?

其实多想想就有解决办法了——我们可以假设两个数组的长度就是一样长的,只不过我赋值的长度不一样,那么剩下没被赋值的系统就默认为0了,所以我们就变成没被比较完的数组与0比较了;

第二个问题:如果两个数组出现了相同的元素怎么办呢?

其实也不难,那么我们就让它们并列赋值给新数组,只不过最后新数组的下标要一次性加2(因为这次一次性赋值了两个数)

大致有了想法后就可以开始写代码了

答案:

#include <stdio.h>
int main()
{
    int n = 0, m = 0, i = 0, j = 0, t = 0;
    int arr1[1000] = { 0 }, arr2[1000] = { 0 }, arr3[2000] = { 0 };
    scanf("%d%d", &n, &m);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr1[i]);
        if (arr1[i] < 0 || arr1[i]>30000)   //如果输入的值不符合题目要求范围
        {
            printf("请重新输入规定范围内的数\n");
            i--;   //重新输入一个值
        }
    }
    for (j = 0; j < m; j++)
    {
        scanf("%d", &arr2[j]);
        if (arr2[j] < 0 || arr2[j]>30000)    //如果输入的值不符合题目要求范围
        {
            printf("请重新输入规定范围内的数\n");
            j--;    //重新输入一个值
        }
    }
    for (i = 0, j = 0, t = 0; i < n || j < m;)   //因为情况很多,所以不适合在for里面改变,于是空过第三部分,跳出循环条件就是当两个数组都用完了(即i==n&&j==m)
    {
        if (arr1[i] > arr2[j])   //当arr1中大于arr2
        {
            if (arr1[i] > arr2[j] && j == m)  //如果不是数组arr2已经比较完的话
            {
                arr3[t] = arr1[i];   //将数组arr1传给arr3
                i++;
                t++;
            }
            else    //如果是arr1和arr2都没用完(即正常情况)
            {
                arr3[t] = arr2[j];
                j++;
                t++;
            }
        }
        else if (arr1[i] < arr2[j])  //当arr1中小于arr2
        {
            if (arr1[i] < arr2[j] && i == n)   //如果不是数组arr1已经比较完的话
            {
                arr3[t] = arr2[j];  //将数组arr2传给arr3
                j++;
                t++;
            }
            else   //如果是arr1和arr2都没用完(即正常情况)
            {
                arr3[t] = arr1[i];
                i++;
                t++;
            }
        }
        else if (arr1[i] == arr2[j])  //当arr1中等于arr2
        {
            arr3[t] = arr1[i];   //将arr1和arr2并列赋值给arr3
            arr3[t + 1] = arr2[j];
            i++;
            j++;
            t = t + 2;   //因为这次同时给arr3赋值了2个,所以下标加2
        }
    }
    for (i = 0; i < t; i++)   //将合并的arr3打印出来
    {
        printf("%d ", arr3[i]);   //如果要求最后一个值后面不加空格,让下标等于t-1时不加空格即可
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1313959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

函数图形渐近线分析

文章目录 曲线的渐近线水平和垂直渐近线斜渐近线斜渐近线公式推导简便方法确定斜渐近线(一次多项式化方法) 例 曲线的渐近线 渐近线综合了极限和函数图形的知识,尤其是斜渐近线 水平和垂直渐近线 若点 M M M沿曲线 y f ( x ) yf(x) yf(x)无限远离原点时,它于某条直线 L L L之…

web应用开发技术的一些概念

一、Servlet 1.Servlet的工作过程&#xff1a; Servelt的工作流程示意图 &#xff08;1&#xff09;客户端发起一个Http请求到服务器&#xff0c;请求特定的资源或者是要执行特定的操作 &#xff08;2&#xff09;服务器在接收到请求后&#xff0c;根据请求相应的URL将请求分发…

2023.12.15 FineBI与kettle

1.结构化就是可以用schema描述的数据,就是结构化数据,能转为二维表格, 如CSV,Excel, 2.半结构化就是部分可以转换为二维表格,如JSON,XML 3.非结构化数据,就是完全无法用二维表格表示的数据,如Word文档,Mp4,图片,等文件. kettle的流程 新建转换-构建流图-配置组件-保存运行 使…

人工智能与星际旅程:技术前沿与未来展望

人工智能与星际旅程&#xff1a;技术前沿与未来展望 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域的应用越来越广泛。在星际旅程领域&#xff0c;AI也发挥着越来越重要的作用。本文将探讨人工智能与星际旅程的结合&#xff0c;以及…

微服务架构之争:Quarkus VS Spring Boot

在容器时代&#xff08;“Docker时代”&#xff09;&#xff0c;无论如何&#xff0c;Java仍然活着。Java在性能方面一直很有名&#xff0c;主要是因为代码和真实机器之间的抽象层&#xff0c;多平台的成本&#xff08;一次编写&#xff0c;随处运行——还记得吗&#xff1f;&a…

word2vec,BERT,GPT相关概念

词嵌入&#xff08;Word Embeddings&#xff09; 词嵌入通常是针对单个词元&#xff08;如单词、字符或子词&#xff09;的。然而&#xff0c;OpenAI 使用的是预训练的 Transformer 模型&#xff08;如 GPT 和 BERT&#xff09;&#xff0c;这些模型不仅可以为单个词元生成嵌入…

数据库02-04 中级SQL

01.on关键字&#xff1a; 主要用join…on来用多关系查询&#xff0c;和where关键字的相同 student关系&#xff1a; takes关系&#xff1a; 02.一般外连接 自然连接&#xff1a; 这个外连接&#xff08;自然连接&#xff09;会缺少空值的元祖&#xff08;本例子中的stude…

python 小程序学生选课系统源码

开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 学生&#xff1a; 登录&#xff0c;选课&#xff08;查看课程及选择&#xff09;&#xff0c;我的成绩&#xff0c;…

【采坑分享】npm login/publish/whoami失败采坑,解决npmERR426、ETIMEDOUT、ECONNREFUSED等错误

目录 前言背景&#xff1a; 采坑之路&#xff1a; 1.修改https为http&#xff0c;问题还在 2.修改为淘宝镜像&#xff0c;问题还在 3.修改为官网地址&#xff0c;问题还在 4.升级node和npm&#xff0c;问题还在 5.猜想网络问题&#xff0c;问题解决 采坑总结&#xff1a…

HBase的安装与简单操作

文章目录 第1关&#xff1a;Hbase数据库的安装第2关&#xff1a;创建表第3关&#xff1a;添加数据、删除数据、删除表 第1关&#xff1a;Hbase数据库的安装 编程要求 根据上述步骤安装配置好HBase数据库&#xff0c;并启动成功。 测试说明 若安装配置成功&#xff0c;则程序会…

《数据结构、算法与应用C++语言描述》- 构建哈夫曼树

哈夫曼树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_29huffmanTree 定长编码与可变长编码 定长编码 每个字符都用固定长度的编码来表示。 例如假设一个文本是由字符 a、u、x 和 z 组成的字符串&#xff0c;每个字符用2位二进…

【JVM从入门到实战】(七)运行时数据区的组成

运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。 《Java虚拟机规范》中规定了每一部分的作用 线程不共享&#xff1a;程序计数器、虚拟机栈、本地方法栈 线程共享&#xff1a;方法区&#xff0c;堆 1. 程序计数器(Program Count…

Docker单点部署 Elasticsearch + Kibana [8.11.3]

文章目录 一、Elasticsearch二、Kibana三、访问四、其他 Elasticsearch 和 Kibana 版本一般需要保持一致才能一起使用&#xff0c;但是从 8.x.x开始&#xff0c;安全验证不断加强&#xff0c;甚至8.x.x之间的版本安全验证方法都不一样&#xff0c;真的很恼火。 这里记录一次成…

字符串——OJ题

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、字符串相加1、题目讲解2、思路讲解3、代码实现 二、仅仅反转字母1、题目讲解2、思路讲解3…

[C++]——学习模板

了解模板——初阶 前言&#xff1a;一、模板1.1 什么是模板1.2 模板的概念1.3 模板可以做什么1.4 泛型模板 二、函数模板2.1 函数模板概念和格式2.2 函数模板原理2.3 函数模板实例化2.3.1 隐式实例化2.3.2 显式实例化 2.4 模板参数的匹配原则2.5 函数模板声明定义分离 三、类模…

服务器一直掉线怎么回事?

随着网络的高速发展&#xff0c;不管是网站还是游戏&#xff0c;如果遇到服务器卡顿的情况&#xff0c;会造成用户访问网站或进游戏&#xff0c;网站页面长时间无法打开&#xff0c;游戏页面运行卡顿&#xff0c;这样就很容易会造成用户的流失&#xff0c;从而导致业务亏损极大…

华为数通——企业双出口冗余

目标&#xff1a;默认数据全部经过移动上网&#xff0c;联通低带宽。 R1 [ ]ip route-static 0.0.0.0 24 12.1.1.2 目的地址 掩码 下一条 [ ]ip route-static 0.0.0.0 24 13.1.1.3 preference 65 目的地址 掩码 下一条 设置优先级为65 R…

数据持久化与临时存储的对决:localStorage 与 sessionStorage(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

《使用ThinkPHP6开发项目》 - ThinkPHP6使用使用中间件验证登录Token

https://blog.csdn.net/centaury32/article/details/134997438 按照https://blog.csdn.net/centaury32/article/details/134999029的方法验证登录Token&#xff0c;那么每一步都需要写同样一段代码&#xff0c;这里可以结合中间件进行验证 一、创建中间件&#xff1a;php thi…

华为配置VRRP负载分担示例

组网需求 如图1所示&#xff0c;HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力&#xff0c;HostA以SwitchA为默认网关接入Internet&#xff0c;SwitchB作为备份网关&#xff1b;HostC以SwitchB为默认网关接入Internet&#xff0c;Switc…