【算法训练-数组 四】【合并】:合并两个有序数组

news2024/11/18 4:45:02

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【数组合并】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了LeetCode的来源),确保刷的题都是高频要面试考的题。

在这里插入图片描述

名曲目标题后,附上题目链接,后期可以依据解题思路反复快速练习,题目按照题干的基本数据结构分类,且每个分类的第一篇必定是对基础数据结构的介绍

合并两个有序数组【EAZY】

其实这道题的思路和合并两个有序链表大同小异

题干

直接粘题干和用例在这里插入图片描述

解题思路

给出解题思路,最好有图

  • step 1:使用三个指针,i指向数组A的最大元素,j指向数组B的最大元素,index指向数组A空间的结尾处。
  • step 2:从两个数组最大的元素开始遍历,直到某一个结束,每次取出较大的一个值放入数组A空间的最后,然后指针一次往前。
  • step 3:如果数组B先遍历结束,数组A前半部分已经存在了,不用管但是如果数组A先遍历结束,则需要把数组B剩余的前半部分依次逆序加入数组A前半部分,类似归并排序最后的步骤。

在这里插入图片描述

代码实现

给出代码实现基本档案

基本数据结构数组
辅助数据结构
算法迭代
技巧双指针(逆序双指针)

其中数据结构、算法和技巧分别来自:

  • 10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树
  • 10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
  • 技巧:双指针、滑动窗口、中心扩散

当然包括但不限于以上

import java.util.*;
public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        // 1 入参校验,数组长度需要满足条件
        if (A == null || A.length < m + n) {
            return;
        }
        // 2 因为A数组后几位是空着的,为了不让前面元素的移动引起的挪动导致整个A发生元素移动,问题可以转换为找最大值,先把最大值放到最后的空位置
        int maxIndex = m + n - 1;
        int i = m - 1;
        int j = n - 1;
        // 双指针从大到小移动,比较A和B的元素将较大的放到A中后边的位置
        while (i >= 0 && j >= 0) {
            A[maxIndex--] = A[i] > B[j] ? A[i--] : B[j--];
        }

        // 如果B还有剩余合并到A中;如果是A有剩余,无需合并到A中
        while (j >= 0) {
            A[maxIndex--] = B[j--];
        }
    }
}

复杂度分析

  • 时间复杂度:O(m+n)。 指针移动单调递增,最多移动 m+n 次,因此时间复杂度为 O(m+n)。
  • 空间复杂度:O(m+n)。 需要建立长度为 m+n 的中间数组

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

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

相关文章

【深度学习】分类损失函数解析

【深度学习】分类相关的损失解析 文章目录 【深度学习】分类相关的损失解析1. 介绍2. 解析3. 代码示例 1. 介绍 在分类任务中&#xff0c;我们通常使用各种损失函数来衡量模型输出与真实标签之间的差异。有时候搞不清楚用什么&#xff0c;下面是几种常见的分类相关损失函数及其…

计算机网络TCP篇之流量控制

计算机网络TCP篇之流量控制 今天谈一谈我对于tcp流量控制的看法 在网络拓扑中如果发送方节点的发送速率大于接受方节点的接受速率&#xff0c;数据会不断在接受方的缓冲区累积&#xff0c;直到接受方的缓冲区满的时候&#xff0c;发送方继续发送数据&#xff0c;这时候接受方无…

redisson使用过程常见问题汇总

文章目录 常见报错1. 配置方式使用错误2. 版本差异报错3. 配置文件中配置了密码或者配置错误4. 字符集和序列化方式配置问题5. Redisson的序列化问题6. 连接池问题&#xff1a;7. Redisson的高可用性问题&#xff1a;8. Redisson的并发问题9. Redisson的性能问题 2. 参考文档 常…

springboot第36集:kafka,JSAPI支付,nginx,微服务Feign与flutter安卓App开发2

去思考自己的项目有哪些让你觉得不好的地方&#xff0c;然后去解决它&#xff0c;而非学习了一堆原理&#xff0c;展示技术能力比展示技术知识更有说服力 其实边解决问题边记录&#xff0c;是一个好习惯&#xff0c;不仅可以在解决问题的时候&#xff0c;方便回顾和查找&#x…

使用webpack-bundle-analyzer分析uni-app 的微信小程序包大小(HbuilderX运行)

1、找到vue.config.js 文件。如果找不到&#xff0c;则在项目根目录下&#xff08;跟pages.json同一个目录下&#xff09;创建一个JS文件&#xff0c;命名为vue.config.js 2、安装webpack-bundle-analyzer&#xff0c;官方网站&#xff1a;https://github.com/webpack-contrib…

中国汽车工业协会软件分会中国汽车基础软件生态标委会第三届二次会议在天津顺利召开

2023年8月30日&#xff0c;中国汽车工业协会软件分会中国汽车基础软件生态标委会&#xff08;AUTOSEMO&#xff09;第三届二次会议在天津召开。出席本次会议的有AUTOSEMO专业指导主任许艳华、中国汽车工业协会软件分会理事长、AUTOSEMO轮值主席、中汽创智CEO李丰军、经纬恒润协…

ChatGPT AIGC总结Excel中Vlookup,lookup,xlookup的区别

在Excel的使用过程中,查找函数是非常重要的,如Vlookup,lookup,Xlookup,index+match等都是使用的最多的函数,我们让ChatGPT,AIGC用思维导图来总结一下,各查找函数的用法与区别。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle…

[网鼎杯 2020 朱雀组]phpweb call_user_func()

时间一跳一跳的 抓个包 很奇怪 结合上面的 date() 认为第一个是函数 我们随便输一个看看 发现过滤了 随便输一个 linux指令 发现报错了 call_user_func() 看看是啥 很容易理解 第一个参数是函数名 后面是 参数 那么这里就是 func 函数 p 数值 所以我们看看有什么办法可以…

毕业设计-基于微信小程序的智能垃圾分类回收系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 视频演示地址&#xff1a; 基于微信小程序的智能垃圾分类回收系统&#xff0c;可作为毕业设计 小…

易优cms小程序插件升级到2.1版本

eyou小程序升级到2.1&#xff0c;主要新增一键获取手机号&#xff0c;统一返回格式等 升级内容&#xff1a; &#xff08;1&#xff09;对全部接口的返回格式做统一化设置 &#xff08;2&#xff09;新增一键获取手机号功能 &#xff08;3&#xff09;新增footprint足迹接口 &…

Win10 屏蔽键盘按键

有时候键盘进水一直触发或者经常误触某个按键&#xff0c;非常影响体验&#xff0c;Win10是支持直接屏蔽按键的 创建注册表 WinR 快捷键输入regedit 打开注册表进入到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout空白处右击新建一个二进制值名为Scan…

机器人制作开源方案 | 桌面级全向底盘--机器视觉

机器视觉是人工智能正在快速发展的一个分支&#xff0c;简单说来机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品&#xff08;即图像摄取装置&#xff0c;分CMOS和CCD两种&#xff09;将被摄取目标转换成图像信号&#xff0c;传送给专用的图像处理系…

刷新单年发射纪录:SpaceX成功发射62次猎鹰9号火箭

SpaceX一直都致力于推进航天领域的发展。近日&#xff0c;该公司的猎鹰9号火箭再次刷新了单年发射纪录&#xff0c;目前已经成功发射了62次。除此之外&#xff0c;今年SpaceX还发射了一枚猎鹰火箭和一枚巨型火箭。马斯克表示&#xff0c;他的目标是实现每月10次猎鹰飞行&#x…

1800亿参数,支持中文,3.5万亿训练数据!开源类ChatGPT模型

这个必须推荐一下&#xff1a;1800亿参数&#xff0c;支持中文&#xff0c;3.5万亿训练数据&#xff01;开源类ChatGPT模型 阿联酋阿布扎比技术创新研究所&#xff08;Technology Innovation Institute&#xff0c;简称TII&#xff09;在官网发布了&#xff0c;目前性能最强的…

探索Redis速度之谜

Redis&#xff0c;作为一款高性能的内存数据库&#xff0c;一直以来都因其出色的速度而闻名。然而&#xff0c;Redis的速度之快究竟源自何处&#xff0c;其中隐藏着怎样的奥秘&#xff1f;在这篇博客中&#xff0c;我们将深入探索Redis速度之谜&#xff0c;揭开其快速性能背后的…

MySQL事务详细讲解

文章目录 什么是事务:1.事务有哪些特性2.并发事务会引起什么问题3.事务的隔离级别有哪些4.Read View在MVCC中如何工作Read View 有四个重要的字段使用 InnoDB 存储引擎的数据库表&#xff0c;它的聚簇索引记录中都包含下面两个隐藏列&#xff1a; 5.可重复读是怎么工作的6.读提…

基于模板快速开发

大家好 , 我是苏麟 , 今天说说如何快速开发 . 首先 , 我们要有一套基础模板 . 例如(整合了) : SpirngBoot SpringMVCMybatisMybatisPlusMySQLRedisSwaggerlombok 根据自己的业务场景整合相应的依赖. 第一步: 把初始化模板复制一份 第二步: 把模板改成项目名 第三步: 在IDEA中…

教你!如何使用Postman做接口测试

界面功能介绍 基础操作步骤&#xff1a; 新建请求集是否需要进行授权&#xff0c;如需要授权码&#xff0c;提前授权&#xff0c;避免接下来的每个接口授权编写请求脚本请求脚本&#xff0c;进行断言判断导出测试结果 postman断言语句 判断接口响应的状态码&#xff1a;Statu…

最后一块石头的重量 II【动态规划】

最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&am…

只有个体户执照,可以用来在抖音开店吗?抖店开通问题解答

我是王路飞。 在抖音开店的门槛&#xff0c;本身就是需要有营业执照的。 至于执照的类型&#xff0c;其实主要看商家自己。 如果你是新手商家&#xff0c;之前也没有怎么接触过电商行业&#xff0c;那么用个体执照在抖音开店足够用了&#xff0c;毕竟你要先入门&#xff0c;…