LeetCode刷题-6

2023-10-31

题目描述

给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。

题目样例

  • 示例1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3][2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
  • 示例2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1][] 。
合并结果是 [1]
  • 示例3:
输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [][1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。
  • 提示:
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-10^9 <= nums1[i], nums2[j] <= 10^9

Java方法:直接合并后排序

思路及算法

最直观的方法是先将数组 nums2 放进数组 nums1 的尾部,然后直接对整个数组进行排序。

代码

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i != n; ++i) {
            nums1[m + i] = nums2[i];
        }
        Arrays.sort(nums1);
    }
}

执行结果

  • 执行结果:通过
  • 执行用时:1 ms, 在所有 Java 提交中击败了17.63%的用户
  • 内存消耗:38.3 MB, 在所有 Java 提交中击败了81.72%的用户

复杂度

  • 时间复杂度:O((m+n)log(m+n))
  • 空间复杂度:O(log(m+n))

Java方法:双指针

思路及算法

可以使用双指针方法。这一方法将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中。为两个数组分别设置一个指针 p1与 p2来作为队列的头部指针。

代码

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = 0, p2 = 0;
        int[] sorted = new int[m + n];
        int cur;
        while (p1 < m || p2 < n) {
            if (p1 == m) {
                cur = nums2[p2++];
            } else if (p2 == n) {
                cur = nums1[p1++];
            } else if (nums1[p1] < nums2[p2]) {
                cur = nums1[p1++];
            } else {
                cur = nums2[p2++];
            }
            sorted[p1 + p2 - 1] = cur;
        }
        for (int i = 0; i != m + n; ++i) {
            nums1[i] = sorted[i];
        }
    }
}

执行结果

  • 执行结果:通过
  • 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
  • 内存消耗:38.5 MB, 在所有 Java 提交中击败了58.52%的用户

复杂度

  • 时间复杂度:O(m+n)
  • 空间复杂度:O(m+n)

Java方法:逆向双指针

思路及算法

nums1 的后半部分是空的,可以直接覆盖而不会影响结果。因此可以指针设置为从后向前遍历,每次取两者之中的较大者放进 nums1 的最后面。严格来说,在此遍历过程中的任意一个时刻,nums1数组中有 m−p1−1 个元素被放入 nums1的后半部,nums2数组中有 n−p2−1 个元素被放入 nums1的后半部,而在指针 p1的后面,nums1​数组有 m+n−p1−1 个位置。由于m+n−p1
−1≥m−p1−1+n−p2−1,等价于p2 ≥−1永远成立,因此 p1后面的位置永远足够容纳被插入的元素,不会产生 p1的元素被覆盖的情况。

代码

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = m - 1, p2 = n - 1;
        int tail = m + n - 1;
        int cur;
        while (p1 >= 0 || p2 >= 0) {
            if (p1 == -1) {
                cur = nums2[p2--];
            } else if (p2 == -1) {
                cur = nums1[p1--];
            } else if (nums1[p1] > nums2[p2]) {
                cur = nums1[p1--];
            } else {
                cur = nums2[p2--];
            }
            nums1[tail--] = cur;
        }
    }
}

执行结果

  • 执行结果:通过
  • 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
  • 内存消耗:38.6 MB, 在所有 Java 提交中击败了31.81%的用户

复杂度

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

LeetCode刷题-6 的相关文章

  • 为什么会出现此异常 FileItemStream$ItemSkippedException?

    在 gwt Web 应用程序中 我必须发送一个文件和附加的一些参数 在服务器端 try ServletFileUpload upload new ServletFileUpload FileItemIterator iterator upl
  • Maven 2:如何将当前项目版本打包在WAR文件中?

    我正在使用 Maven 2 构建我的 Java 项目 并且正在寻找一种向用户呈现 pom xml 当前版本号的方法 例如使用 Servlet 或 JSP 据我所知 最好的方法是 Maven 将版本号作为文本文件打包到 WAR 中 这使我能够
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • jvm 次要版本与编译器次要版本

    当运行使用具有相同主要版本但次要版本高于 JVM 的 JDK 编译的类时 JVM 会抛出异常吗 JDK 版本并不重要 类文件格式版本 http blogs oracle com darcy entry source target class
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何开始使用 Chainsaw for Log4j?

    我想开始使用 Chainsaw v2 几乎没有关于它的信息 我只找到了this http www velocityreviews com forums t140105 help using chainsaw for log4j html 但
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • JFace ColumnWeigthData 导致父级增长

    我有一个 Eclipse RCP 应用程序 并且想要在TableViewer using ColumnWeigthData as ColumnLayoutData 问题是父表单 ScrolledForm在示例代码中 每当我布局表格时都会增加
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • Java:java.util.ConcurrentModificationException

    我正在制作 2D 目前正在研究用子弹射击 子弹是一个单独的类 所有项目符号都存储在称为项目符号的数组列表中 当它超出屏幕一侧 Exception in thread main java util ConcurrentModification
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement

随机推荐

  • 2020研究生数学建模B题——汽油辛烷值优化——获奖论文思路分享

    B题 汽油辛烷值优化 作者序言 B题当时比赛时选的人非常多 可以说占据了近一般的参赛队伍 但是这题蕴含很多小问题 诸多选手也是叫苦连天 我们队伍利用3天的时间完成这道赛题 最终获得全国一等奖 1 3 也是全校唯一 一等奖 在此将整体思路整理
  • SAPERP软件如何修改采购订单信息记录中的净价?

    作者 Chisting 声明 本文章仅用于SAP软件的应用与学习 不代表SAP公司 注 文中所示截图来源SAP软件 相应著作权归SAP所有 在SAP系统中如果采购信息记录中的净价维护错误 是可以进行修改的 无论是SAP ERP系统还是S4
  • 各种进制的计算及原理

    滴水逆向视频学习笔记 进制运算的本质实际就是根据进制表查表所得 我们日常主要用十进制来运算 是因为我们对十进制的加法表和乘法表熟记于心 所以计算时候非常快 但我们学习计算机底层更多是使用二进制 逢2进1 八进制 逢8进1 和十六进制 所以我
  • SpringCloud 商城系统搭建之Zuul

    Spring Cloud Zuul简介 Spring Cloud Zuul路由是微服务架构的不可或缺的一部分 提供动态路由 监控 弹性 安全等的边缘服务 Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器 前提 本文是基于
  • 计算机网络的常用命令汇总

    在使用电脑的过程中 我们经常需要检测电脑的网络状态 这时通过使用一些网络的基本命令来检测电脑的网络状态 以下 介绍几种常用的网络命令 1 ping命令 ping 命令式用来测试TCP IP 网络是否畅通或者网络连接速度的命令 其原理是根据计
  • 1.软件开发方法

    软件开发方法 文章目录 软件开发方法 1 瀑布模型 2 增量模型 3 喷泉模型 4 敏捷开发 5 DevOps开发 6 DDD领域开发 7 总结 7 总结 1 瀑布模型 瀑布模型是一种线性 顺序的软件开发方法 以阶段为基础 需求分析 设计
  • pip win上安装gpu版本 pytorch

    检查cuda版本 nvcc V 打开torch previous 版本页面 https pytorch org get started previous versions 选择合适的版本 如 pip install torch 1 13 1
  • C语言指针详解及示例代码

    C语言指针详解及示例代码 指针是C语言中一项重要的概念 它允许我们直接访问和操作内存中的数据 本文将详细介绍C语言中指针的概念 使用方法和示例代码 指针的基本概念 指针是一个变量 它存储了其他变量的内存地址 通过指针 我们可以直接访问和修改
  • 用递归的方法求n!

    用递归的方法求n 在写此函数之前 我们需要知道 函数递归是什么 顾名思义 函数递归 着重在 递归 俩字 对于函数 我想大部分初始者已经不陌生 在这里笔者就不做过多的讲述 在调用一个函数的过程中 又直接或者间接的调用该函数本身 称为函数的递归
  • springboot项目添加lombok日志输出控制台和log文件

    这个配置我也是在网上查找的 但是找不到出处了 首先 在resources下面建立logback spring xml文件 这个logback spring是默认springboot可以扫描到的 不用在yml中配置 也可以自己起名字 要在ap
  • C++ 画热力图

    void get point color float intensity int r int g int b if intensity lt 1 r 0 g 0 b 118 else if intensity lt 2 r 84 g 85
  • 第十四届蓝桥杯软件类 1 期模拟赛填空题及题解

    蓝桥杯还剩仅仅10天 但是本人现在才开始准备啊 不过事已至此只好刷一点题练练手感了 系统地去学算法肯定是来不及啦 题目来源 第十四届蓝桥杯软件类 1 期模拟赛 大学组 填空题3 4 5 填空3 项数 问题描述 小蓝特别喜欢调和级数 S n
  • WebService接口与HTTP接口的联系

    1 WebService有很多协议 为什么HTTP比较流行 WebService是个很重型的规范 它的应用协议是SOAP 简单对象访问协议 它所依赖的下层通信方式不单单是HTTP 也有SOAP over SMTP SOAP over TCP
  • 机器学习之空间滤波器

    目录 空间滤波 原理 平滑滤波 图例 均值平滑滤波器 matlab 代码 中值平滑滤波器 matlab 代码 人脸识别识别率比较 PCA k近邻分类器 锐化滤波 Unsharp Mask 效果图 拉普拉斯 效果图 锐化滤波器 matlab
  • 猿创征文| ‘vue‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    vue 不是内部或外部命令 也不是可运行的程序 或批处理文件 今天在使用vue ui进行搭建项目的时候出现了这个问题 在Visual Studio Code中通过vue ui指令使用脚手架安装项目时 终端报错 vue 不是内部或外部命令 也
  • Facebook数据中心实践分析,OCP主要工作成果介绍

    Facebook数据中心实践分析 OCP主要工作成果介绍 摘要 用讲故事的方式重点介绍了Facebook在数据中心方面的实践 其成立开放计算项目 OCP 以来的主要工作成果 以下为正文 保密本就是数据中心行业的惯例 2014年11月 我独自
  • mw325r已断开服务器无响应,水星mw325r路由器恢复出厂设置之后上不了网怎么办?...

    我把水星mw325r路由器恢复出厂设置之后有点问题了 可以教教我怎么解决吗 这是一个典型的重置路由器没有正确设置的案例 路由器恢复出厂的意思就是跟刚买来的时候一样 没有任何用户自己的配置 所以 正确配置路由器才可以上网 接下来家用路由器网小
  • Python 机器学习实战

    1 机器学习概述 机器学习正在迅速改变我们的世界 作为人工智能的核心 我们几乎每天都会读到机器学习如何改变日常的生活 一些人认为它会带领我们进入一个风格奇异的高科技乌托邦 而另一些人认为我们正迈向一个高科技天启时代 将与窃取我们工作机会的机
  • RabbitMQ消息堆积问题及惰性队列

    一 消息堆积 1 消费者堆积问题 当生产者生产消息的速度超过了消费者处理消息的速度 就会导致消息在队列中进行堆积 一定时间后会造成队列达到存储的上限 那么最开始进入队列的消息可能变成死信 会被丢弃 有关死信以及死信消息的处理问题的详细介绍可
  • LeetCode刷题-6

    数组 88 合并两个有序数组 题目描述 题目样例 Java方法 直接合并后排序 思路及算法 代码 执行结果 复杂度 Java方法 双指针 思路及算法 代码 执行结果 复杂度 Java方法 逆向双指针 思路及算法 代码 执行结果 复杂度 题目