有序数组合并

2023-10-27

数组合并是归并排序中的一个步骤,今单独就两个有序数组的合并给出代码实现。归并排序的另一个步骤就是递归,递归就是一个方法在其方法体的某个地方调用自己,这样就会将同一个逻辑不断的压栈,到达递归条件后,又一层层地出栈,直到所有方法被压栈的部分都被执行完毕,递归就结束了dd只是方法的参数值有所不同,只要设置好递归返回的条件,递归中方法能否继续压栈的条件一般也是根据方法的参数来设定的,应该就不会导致栈崩溃,最经典的例子就是计算阶乘。

问题描述:

给定两个数组,
若它们同为升序,则合并它们得到一个为升序的新数组,
如{1,3,5,7,9}和{2,4,6,8},
合并后得到{1,2,3,4,5,6,7,8,9};
若它们同为降序,则合并他们得到一个为降序的新数组,
如{8,6,4,2}和{9,7,5,3,1},
合并后得到{9,8,7,6,5,4,3,2,1}。

源码:
package compute;
/**
 *@create by gzx on 2022-2-10
 */
public class ArrayMerge {
	public static void main(String[] args) {
		//合并升序的两个数组
		int[] asc1 = {2,4,5,6,7,9};
		int[] asc2 = { 1,2,3,4,5,8 };
		int[] asc = mergeAsc(asc1, asc2);
		for (int i : asc) {
			System.out.print(i+" ");
		}
		System.out.println("\n----------------------");
		
		//合并降序的两个数组
		int[] desc1= {8,7,5,3,1};
		int[] desc2= {9,6,4,3,2,0};
		int[] desc = mergeDesc(desc1, desc2);
		for (int i : desc) {
			System.out.print(i+" ");
		}
	}

	/**
	 * 要求a1,a2同为升序,才能合并出升序的mer数组
	 * @param a1 一个升序数组
	 * @param a2 一个升序数组
	 * @return mer 升序合并后的数组
	 */
	public static int[] mergeAsc(int[] a1, int[] a2) {
		int len1 = a1.length;
		int len2 = a2.length;
		int mlen = len1 + len2;
		int[] mer = new int[mlen];
		int p1 = 0, p2 = 0, m = 0;// 分别用作数组a1,a2,mer的当前下标
		while (p1 < len1 && p2 < len2) {
			// 把a1和a2中当前下标对应的元素复制到mer中
			if (a1[p1] <= a2[p2]) {
				mer[m++] = a1[p1++];
			} else {
				mer[m++] = a2[p2++];
			}

		}
		while (p1 < len1) {// 如果a1还有剩余元素,则复制到mer中
			mer[m++] = a1[p1++];
		}
		while (p2 < len2) {// 如果a2中还有剩余元素,则复制到mer中
			mer[m++] = a2[p2++];
		}
		return mer;
	}
	/**
	 * 要求a1,a2同为降序,才能得到同为降序的mer
	 * @param a1 一个降序数组
	 * @param a2 一个降序数组
	 * @return mer 降序合并后的数组
	 */
	public static int[] mergeDesc(int[] a1, int[] a2) {
		int len1 = a1.length;
		int len2 = a2.length;
		int mlen = len1 + len2;
		int[] mer = new int[mlen];
		int p1 = 0, p2 = 0, m = 0;// 分别用作数组a1,a2,mer的当前下标
		while (p1 < len1 && p2 < len2) {
			// 把a1和a2中当前下标对应的元素复制到mer中
			if (a1[p1] <= a2[p2]) {
				mer[m++] = a2[p2++];
			} else {
				mer[m++] = a1[p1++];
			}
			
		}
		while (p1 < len1) {// 如果a1还有剩余元素,则复制到mer中
			mer[m++] = a1[p1++];
		}
		while (p2 < len2) {// 如果a2中还有剩余元素,则复制到mer中
			mer[m++] = a2[p2++];
		}
		return mer;
	}
}

运行结果:
1 2 2 3 4 4 5 5 6 7 8 9 
----------------------
9 8 7 6 5 4 3 3 2 1 0 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有序数组合并 的相关文章

  • 算法:双指针

    双指针 双指针是一种思想或一种技巧并不是特别具体的算法 具体就是用两个变量动态存储两个结点 来方便我们进行一些操作 通常用在线性的数据结构中 特别是链表类的题目 经常需要用到两个或多个指针配合来记忆链表上的节点 完成某些操作 常见的双指针方
  • C语言/C++实现栈操作

    一 栈的概念 栈是一种常用的数据结构 它遵循先入后出 Last In First Out LIFO 的原则 栈的操作只在栈的一端进行 该端被称为栈顶 而另一端称为栈底 栈的基本操作包括压栈 入栈 push 和弹栈 出栈 pop 分别用于将元
  • 将二叉树转为有序的双向链表

    一 题目要求 输入一棵二叉排序树 现在要将该二叉排序树转换成一个有序的双向链表 而且在转换的过程中 不能创建任何新的结点 只能调整树中的结点指针的指向来实现 include
  • 直线检测方法—LSD论文翻译

    附原文链接 LSD a Line Segment Detector 摘 要 LSD是一个线段检测器 能够在线性时间内得到亚像素级精度的检测结果 它无需调试参数就可以适用于任何数字图像上 并且能够自我控制错误数量的检测 平均来说 一个图像中允
  • 4399 C++笔试题

    1 写出一个函数 取到链表中倒数第二个节点 双链表 node getSec List mylist return mylist m tail gt m prev m prev为链表前指针 单链表 node getSec List mylis
  • Qt——用于表格QTableView的模型

    如果想使用表格来呈现数据 Qt提供了一个方便的部件QTableWidget 但是直接用它实现一些功能可能比较困难 这里将介绍一种强大 灵活的方式来操作表格 一 模型 视图架构 在这个架构中 模型用于存储数据 视图用于呈现数据 除此之外 还有
  • findBug 错误修改指南

    FindBugs错误修改指南 1 EC UNRELATED TYPES Bug Call to equals comparing different types Pattern id EC UNRELATED TYPES type EC c
  • 逆波兰表达式求值(C语言实现)

    实验项目 从文本文件输入任意一个语法正确的 中缀 表达式 显示并保存该表达式 利用栈结构 把上述 中缀 表达式转换成后缀表达式 并显示栈的状态变化过程和所得到的后缀表达式 利用栈结构 对上述后缀表达式进行求值 并显示栈的状态变化过程和最终结
  • DNG格式解析

    Author Maddock Date 2015 04 22 转载请注明出处 http www cnblogs com adong7639 p 4446828 html DNG格式基本概念 DNG格式是在TIFF的基础上扩展出来的 要了解D
  • 递归算法中的时间复杂度分析

    对于一种算法的时间复杂度分析还是特别重要的 在一些非递归算法中 我们仅仅看运算次数最多的那一行代码可能执行多少次就可以 实际就是看在循环中变量的变化 但是对于递归算法中该怎么分析呢 下面介绍几种递归函数中的算法时间复杂度分析的方法 0 递推
  • 算法系列15天速成——第八天 线性表【下】

    一 线性表的简单回顾 上一篇跟大家聊过 线性表 顺序存储 通过实验 大家也知道 如果我每次向 顺序表的头部插入元素 都会引起痉挛 效率比较低下 第二点我们用顺序存储时 容 易受到长度的限制 反之就会造成空间资源的浪费 二 链表 对于顺序表存
  • 以太坊系列之十五: 以太坊数据库

    以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库 是谷歌提供的开源数据leveldb 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API 存储内容 NOSQL是一个key value数据
  • 字符串09--表示数值的字符串

    字符串09 表示数值的字符串 jz53 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值
  • JavaScript系列——数组元素左右移动N位算法实现

    引言 在自己刚刚毕业不久的时候 去了一家公司面试 面试官现场考了我这道题 我记忆深刻 当时没有想到思路 毫无疑问被面试官当成菜鸟了 最近刚好在研究数组的各种算法实现 就想到这道题 可以拿来实现一下 纪念自己逝去的青春 需求 假设有这样一个数
  • 4Sum

    Given an array S of n integers are there elements a b c and d in S such that a b c d target Find all unique quadruplets
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • 机器学习算法GBDT的面试要点总结-上篇

    1 简介 gbdt全称梯度提升决策树 在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一 在前几年深度学习还没有大行其道之前 gbdt在各种竞赛是大放异彩 原因大概有几个 一是效果确实挺不错 二是即可以用于分类也可以用于回归 三是可
  • 【试题】排列组合

    在写一个远程的代码 如果本地有M个显示器 远程有N个显示器 M lt N 依据分辨率 显示器刷新频率等要求 需要对远程的N个显示器进行最佳分辨率修改 之后 需要从N个远程显示器中选择M个 跟本地显示器进行一对一的匹配 即从 A N M N
  • 按照层次遍历结果打印完全二叉树

    按照层次遍历结果打印完全二叉树 按照推论结果 l 层首个节点位置 2 h l 1 l 层节点间距 2 h l 1 1 编码实现 public static
  • 从源码角度来谈谈 HashMap

    HashMap的知识点可以说在面试中经常被问到 是Java中比较常见的一种数据结构 所以这一篇就通过源码来深入理解下HashMap 1 HashMap的底层是如何实现的 基于JDK8 1 1 HashMap的类结构和成员 HashMap继承

随机推荐

  • 蓝桥杯大写变小写C语言,小写数字转化为大写数字(小米OJ题与蓝桥杯题)

    import java util public class Main public static void main String args Scanner scan new Scanner System in String str Str
  • Git本地仓库文件的创建、修改和删除

    目录 基本信息设置 1 设置用户名 2 设置用户名邮箱 Git仓库操作介绍 1 创建一个新的文件夹 2 在文件内初始化git仓库 创建git仓库 3 向仓库中添加文件 1 创建一个文件 2 将文件添加到暂存区 3 将暂存区添加到仓库 4 修
  • JavaScript贪心算法

    贪心算法 贪心算法有 霍夫曼编码 prim和kruskal最小生成树算法 Dijkstra最短路径算法 什么是贪心算法 1 针对一组数据 问题有限制值和期望值 希望从中选出几个数据 在满足限制值的情况下 期望值最大 2 每次选择当前情况下
  • UVA1601 The Morning after Halloween

    UVA1601 The Morning after Halloween 题目链接 做这道题的时候看到一个写的很好的代码 在这里保存下来 以便以后学习 题目分析 这道题和普通的bfs有所不同 解题方法也有些差别 主要是这里有三个移动的 小鬼
  • ant打包提示找不到文件解决办法

    运行ant打包时如果出现提示找不到tools目录下某些jar或者bat文件的错误 是因为新版android sdk目录结构产生了变化 原本在sdk tools目录下的文件被转移到sdk build tools 各个版本号文件夹中 需要复制里
  • matlab将数据输出到excel中,matlab数据输出为excel表格-如何把matlab中的数据导到excel表格中...

    如何将matlab工作空间的数据导出到excel 1 很简单的用xlswrite函数就可以了 首先打开matlab 输入你的代码 2 找到你要存放文件的位置复制绝对路径 致谢文件名的话就会存放在当前目录中 如图以f盘根目录为例 3 然后写x
  • 微信小程序集成和使用mqtt(同时支持uniapp和原生)

    前言 在集成mqtt到小程序的开发过程中 确实走了不少弯路 下了许许多多的示例 一步步踩坑到现在终于完美解决了小程序引入mqtt的方法 该方法原生和uniapp均适用 1 小程序网页配置 先登录微信公众平台 找到开发 开发管理 开发设置页面
  • 记录--MMDeploy安装、python API测试及C++推理

    目录 1 前言 2 MMDeploy安装 2 1 下载代码仓库 2 2 安装构建和编译工具链 2 3 创建Conda虚拟环境 2 4 安装MMDeploy SDK依赖 2 5 安装推理引擎 2 6 设置PATH 2 7 编译安装依赖库 3
  • EleAtt-RNN: Adding Attentiveness to Neurons in Recurrent Neural Networks

    EleAtt RNN Adding Attentiveness to Neurons in Recurrent Neural Networks EleAtt RNN 在循环神经网络的神经元当中加入注意力 1 创新点 现在研究者研究RNN 把
  • 关于JAVA输入输出流造成的Runtime线程阻塞问题【新人笔记】

    萌新最近搬砖遇到一个问题 上面让我做一个dump文件的自动解析系统 至于解析的工具 准备用的是google的breakpad 项目部署环境是linux jdk1 8 其他的无关紧要也就不谈了 一开始写了一个demo放到测试机上面跑 最初代码
  • 数字IC手撕代码-握手信号(READY-VALID)

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • 微信公众号开发 微信支付 本地联调jssdk 提示系统错误,错误码:63002,invalid signature

    需求 公众号网页调用微信js sdk完成微信支付 遇到的问题 无法在本地进行联调 通过微信的官方文档可以看到要在项目里调 微信的api首先是需要在公众号设置里绑定安全域名的 然后需要将当前网页的URL 不包含 及其后面部分 传给后台生产wx
  • nginx+keepalived高可用详解配置

    Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案 高可用 广义来讲 是指整个系统的高可用行 狭义的来讲就是主机的冗余和接管 它与HeartBeat实现类似的功能 都可以实现服务或者网络的高可用 但是又
  • QT遇到的一些坑 信号槽 多线程 GBK

    1 信号槽 想使用信号槽 需要继承public QWidget类 并在类中定义宏Q OBJECT 2 GBK编码 QT的中文是UTF8编码且会自动把gbk编码转换成utf8编码 3 多线程 QT的线程是异步模型 需要把socket传到线程中
  • 更常用的BRDF--------Phong光照方程

    Phong光照方程 相对于物理的BRDF使用较多的反射计算方程为Phone光照方程如下 其中v是从表面点p到视点的向量 r是光线l对法线n的反射光线 mshi是参数因子用于不同材质的不同反射强度 如下图 由公式可知向量r和向量v越接近反射亮
  • 【Flutter 1-5】运行Flutter的第一个项目——计数器

    创建项目 创建Flutter项目有很多种方法 各个IDE工具也都集成了创建Flutter项目的快捷操作 我们这里列举三种方式 使用命令行创建 使用Android Studio创建和使用VSCode创建 文章首发地址 使用命令行创建 在Flu
  • vue --echarts

    x轴文字横向竖着排列 xAxis type category boundaryGap true nameGap 30 splitArea show false axisLabel show true interval 0 formatter
  • RunnerGo:轻量级、全栈式、易用性和高效性的测试工具

    随着软件测试的重要性日益凸显 市场上的测试工具也日益丰富 RunnerGo作为一款基于Go语言研发的开源测试平台 以其轻量级 全栈式 易用性和高效性的特点 在测试工具市场中逐渐脱颖而出 RunnerGo是一款轻量级的测试工具 使用Go语言研
  • @FeignClient 注解的使用与常见问题

    概述 Feign 是一个声明式的 Web 服务 通过定义一个添加相应注解的接口 即可完成一个 Web 服务的接口 SpringCloud 对 Feign 进行了封装以后 其开始能够支持 Spring MVC 标准注解 同时在 SpringC
  • 有序数组合并

    数组合并是归并排序中的一个步骤 今单独就两个有序数组的合并给出代码实现 归并排序的另一个步骤就是递归 递归就是一个方法在其方法体的某个地方调用自己 这样就会将同一个逻辑不断的压栈 到达递归条件后 又一层层地出栈 直到所有方法被压栈的部分都被