NC22 合并两个有序的数组 - java语言实现

2023-11-18

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。


1. 题目描述

给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组

题目要求:
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了,且后台会自动将合并后的数组 A 的内容打印出来,所以也不需要自己打印
3. A 数组在[0,m-1]的范围也是有序的
示例
输入:
[1,2,3],[2,5,6]
返回值:
[1,2,2,3,5,6]

2. 题目解读

数组A有m个元素,数组B中有个元素,数组A中有足够的空间(m+n)存放两个数组合并后的元素,但是合并后的数组A是有序的。
【注】不要使用sort函数,自己实现方法合并数组。

3. 思路

方式一:直接把B数组存放到A数组后面,再利用Sort函数进行排序即可;但这样只是取巧的方式,我们需要一些简单的思想算法来进行解题。- (不推荐,如果实在做不出来,可以临时使用)
方式二:定义三个变量,来记录数组下标;因为数组都是有序的,需要从数组末尾下标进行操作,把较大的数排在后面;定义数组A下标pa = m-1,数组B下标pb = n-1,定义k下标来存放pa与pb下标比较后较大的值 k = m+n-1;

两数组中元素比较涉及循环,循环结束有两种结果:数组A结束 或 数组B结束
– ① 数组B结束,对结果没有影响,数组A是有序的;(只有数组B中的数大于数组A中的数,才可能放入A中,所以只要是数组B结束的A中一定是有序的)
– ②数组A结束,说明数组B中还有元素,因为数组是有序的,所以需要把数组B中剩余的元素根据下标依次插入到数组A中即可;

图示起始位置:

在这里插入图片描述

循环条件控制示例图:

在这里插入图片描述

4. 代码实现

代码实现具体操作:
① 想到用三种下标实现pa,pb,k
② 找到循环条件pa >= 0 && pb >= 0
③ 比较pa与pb下标在数组中对应的元素,大的元素放在数组A中的k位置;(比较完记得下标移动,谁数大,谁下标-1)
④ 单独处理数组A先走完,数组B中还有剩余的情况

public void merge(int A[], int m, int B[], int n) {
        int pa = m - 1;
        int pb = n - 1;
        int k = m + n - 1;
        while (pa >= 0 && pb >= 0) {
            if(A[pa] < B[pb]) {//数组B中的元素大,就讲B的元素放到数组A中的k位置
                A[k] = B[pb];
                pb--;//数组B下标-1
                k--;//k位置-1
            } else {
                A[k] = A[pa];
                pa--;//数组A下标-1
                k--;//k位置-1
            }
        }
        //处理数组A先走完,数组B中还有剩余的情况
        while(pb >= 0) {
            A[k] = B[pb];
            pb--;
            k--;
        }
    }

总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NC22 合并两个有序的数组 - java语言实现 的相关文章

随机推荐

  • 泰克

    主要功能 硬件连接 参数配置 运行参数 数据查询 程控对象 示波器 程控接口 兼容市面上所有具有GPIB USB RS232 LAN RS485 TTL任意一种程控接口的示波器 仪器兼容性 泰克Tektronix 是德科技Keysight
  • CISC RISC ARM MIPS区别与联系

    转载 文章有点老 不过还是有所收获 补充一句 国内那么多牛人研究处理器架构 要钱有钱 要人有人 ARM都能获得如此成就 为啥国产那么多CPU团队都不成功 其它类型的芯片也一样 大多都是买国外IP 个人理解 相关专利太少 也就是积累不足 无法
  • 【MATLAB第31期】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理回归问题MATLAB代码实现(持续更新)

    MATLAB第31期 基于MATLAB的降维 全局敏感性分析 特征排序 数据处理回归问题MATLAB代码实现 持续更新 本文敏感性分析主要分析回归问题 下期分析分类问题 fisher rf arf nca等 内容更新 增加视频解说 基于MA
  • npm创建openlayer(入门)

    1 搭建node js开发环境 2 创建目录 mkdir ol deme 3 安装ol包 npx create ol app 4 打开 npm start
  • flex布局和grid布局

    flex布局 父容器 parent 8个设置项 parent display flex flex direction row row reverse column column reverse 决定子元素的排列方式 flex wrap no
  • 服务器系统磁盘分区,服务器磁盘分区教程

    服务器磁盘分区教程 内容精选 换一换 对于Linux弹性云服务器 磁盘分区与磁盘设备名称完全对应 本节以Red Hat Enterprise Linux 7的图形界面为例 介绍查询Linux弹性云服务器磁盘分区与磁盘设备的方法 以root权
  • pandas导入和导出数据至MySQL数据库

    安装准备 可以不用看 同学们在进行数据分析 数据处理时经常会使用pandas来储存结构化数据 我们在数据处理中会出现各种的过程文件或最终文件 虽然pandas给我们提供了非常多的输出结口 比如csv文件 xlsx文件 但在软件开发过程中db
  • 关于httpurlconnection getcontentlength返回值为-1的问题

    在做AsyncTask异步任务读取网络数据的时候 发现了httpUrlConnection的获取数据内容长度 connection getContentLength 总是为 1 导致进度条一直为灰色状态 预期结果应如图所示 而现在的效果是这
  • 网络协议的三要素

    一个网络协议主要由语法 语义和同步三个要素组成 1 语法 语法指数据与控制信息的结构或格式 确定通信时采用的数据格式 编码及信号电平等 2 语义 语义由通信过程的说明构成 它规定了需要发出何种控制信息 完成何种控制动作以及做出何种应答 对发
  • timeout in locking authority file in /home/**/.Xauthority,

    进入终端后使用startx命令 看是否有错误提示 我的当时是 timeout in locking authority file in home Xauthority 解决办法是将 Xauthority删掉 在检查用户目录权限 确定为775
  • Mesh(802.11s)组网 — 基于OpenWRT路由器

    一 mesh网络 1 mesh网络拓补图 2 介绍 二 OpenWRT路由器Mesh网络配置 1 准备阶段 说明 本次测试用2台单WiFi路由器作为测试 wifi用于组建Mesh网络连接 因此内网已无额外WiFi可以提供使用 因此局域网用有
  • Android Studio3.5.2 设置代码提示和代码自动补全快捷键

    方法步骤如下 1 左上角点击File选项 找到Settings 2 点击Settings后 找到Editor 3 点击Editor后 找到General 点击General 找到Code Completion 从图中我们可以看到标红 选择F
  • 实时时钟DS1302原理详解和单片机编程

    一 DS1302的功能 DS1302是美国DALLAS推出的一款高性能 低功耗的日历时钟芯片 DS1302是一种串行接口的实时时钟 芯片内部具有可编程的日历时钟和31个字节的静态RAM 日历时钟可以自动进行闰年补偿 计时准确 接口简单 使用
  • mfc读取txt文件一列数据到double数组中

    CString filepath filepath C Users Administrator source repos MFCApplication8 Debug data txt std vector
  • 用jquery插件实现手风琴效果

  • 电脑性能一目了然,教你用测试软件测试整机性能

    一台笔记本电脑或者是一台DIY台式电脑 都是由处理器 显卡 硬盘等配件构成 而每个配件都有自己的性能 性能是高是低我们可以进行单项测试 对于整机性能我们也可以对其进行测试 来看看它的真实性能到底如何 CPU中文名叫中央处理器 它是一台电脑中
  • Java多线程并行处理任务的实现

    Java多线程并行处理任务的实现 在实际项目开发的过程中 遇到过需要处理一个由多个子任务组成的任务的问题 顺序处理起来会造成响应时间超长 用户体验不好的问题 我想到一个解决方案 即使用多线程并行处理子任务 思路就是使用ThreadPoolE
  • 微信小程序 web-view 访问外部链接

  • mysql(8.0.27)本地启动没有问题,远程无法连接解决方案+开启远程连接+问题排查路径

    目录标题 mysql安装 现象 错误排查 mysql安装 mysql8 0 27 免安装教程连接 安装教程连接 现象 1 mysql本地启动正常 C Users youc gt mysql u root p Enter password W
  • NC22 合并两个有序的数组 - java语言实现

    文章目录 1 题目描述 2 题目解读 3 思路 4 代码实现 总结 学习的道路很枯燥 希望我们能并肩走下来 编程真是一件很奇妙的东西 你只是浅尝辄止 那么只会觉得枯燥乏味 像对待任务似的应付它 但你如果深入探索 就会发现其中的奇妙 了解许多
Powered by Hwhale