leetcode第88题入口

题目描述

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

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。


示例 :


输入: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] 。

解法一:暴力破解

Java代码1

import java.util.*;
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int len = m+n;
for(int i=m;i<len;i++){
nums1[i] = nums2[i-m];
}
Arrays.sort(nums1);
}
}

数组拷贝

也可以使用System.arraycopy方法

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

参数分别代表源数组,源数组起始索引,目标数组,目标数组位置,元素个数

System.arraycopy图解

Java代码2

class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2,0,nums1,m,n);
Arrays.sort(nums1);
}
}

复杂度分析

没有用到连个数组正序的条件,复杂度取决于排序算法。

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

空间复杂度:O(1)


解法二:双指针 (从前往后)

指针起始位置图解

Java代码

class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] nums1_copy = new int[m];
System.arraycopy(nums1,0,nums1_copy,0,m);
int p1 = 0;
int p2 = 0; int p = 0;
while(p1<m && p2<n){
nums1[p++] = nums1_copy[p1]>nums2[p2]?nums2[p2++]:nums1_copy[p1++];
}
if(p1<m){
System.arraycopy(nums1_copy,p1,nums1,p,m-p1);
}
if(p2<n){
System.arraycopy(nums2,p2,nums1,p,n-p2);
}
}
}

复杂度分析

利用到了两数组有序的条件

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

空间复杂度:O(m)


解法三:双指针(从后往前)

空闲空间的利用:因为数组1有足够的空间放置所有合并后的数据,我们可以利用当前数组1中空闲的空间,节省解法二中额外数组拷贝的空间。

双指针起始位置图解

Java代码

class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m-1;
int p2 = n-1; int p = n+m-1;
while(p1>=0 || p2>=0){
nums1[p--] = p1>=0 && (p2 < 0 || nums1[p1]>nums2[p2])?nums1[p1--]: nums2[p2--];
} }
}

复杂度分析

利用到了两数组有序的条件,并且利用了数组1的空闲空间,没有开辟新内存;

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

空间复杂度:O(1)

[每日算法] leetcode第88题:合并两个有序数组的更多相关文章

  1. 【python】【补】Leetcode每日一题-合并两个有序数组

    [python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...

  2. leetcode 88. C++ 合并两个有序数组

    Leetcode 88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 ...

  3. leetcode第四题:两个有序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

  4. Leetcode 88:合并两个有序数组

    Leetcode链接 : https://leetcode-cn.com/problems/merge-sorted-array/ 问题描述: 给定两个有序整数数组 nums1 和 nums2,将 n ...

  5. 【leetcode 简单】第二十题 合并两个有序数组

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...

  6. python3实现合并两个有序数组

    很早就听同学和师兄经常说刷题很重要,然而编程能力一直都很渣的我最近才开始从leetcode的初级算法开始.今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲 ...

  7. [LeetCode每日一题]88. 合并两个有序数组

    [LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...

  8. 每日一道 LeetCode (19):合并两个有序数组

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  9. LeetCode系列之 (JavaScript) => 88. 合并两个有序数组

    题目描述: [Leetcode 题目链接]:88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com) 解题思路分析: 在nums1中找到nums2 插入的位置,然后在 ...

  10. Leetcode#88. Merge Sorted Array(合并两个有序数组)

    题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

随机推荐

  1. OpenMMLab AI实战营 第六课笔记

    OpenMMLab AI实战营 第六课笔记 目录 OpenMMLab AI实战营 第六课笔记 1.什么是语义分割 1.1 语义分割的应用 1.1.1 应用:无人驾驶汽车 1.1.2 应用:人像分割 1 ...

  2. Verilog3_组合逻辑电路

    组合逻辑电路设计方法 使用assign语句: 描述简单的组合逻辑电路 使用always块: 描述复杂的组合逻辑电路 要点: 只在一个always模块中对某一变量进行赋值: 将所有敏感变量列在敏感变量列 ...

  3. SQL统计数据之总结

    一.查询SQL SELECT t1.规则编号 AS 编码, t1.规则描述 AS 名称, SUM( CASE WHEN t3.DATA_SOURCES = '00' THEN 1 ELSE 0 END ...

  4. Linux 常用脚本命令-lsof、find、rpm、SS、top、vim

    1,关机命令 1 shutdown -h now/0 2 halt 3 init 0 4 poweroff 5 举例: 6 shutdown -h 3 ------3分钟后关机(可用shutdown ...

  5. openSSL学习-1

    上一节[openSSL学习-0]了解openSSL和安装,本节以des.h为例,学习DES分组密码算法 DES 加密分组 调用函数,实现一个分组的加解密(DES-ECB模式) #include < ...

  6. SQL Server与ORACLE数据库存储过程编写的几个不同之处

    一直在使用SQL Server数库的存储过程进行业务数据处理,现在ORACLE上进行存储过程应用,感觉没有MSSQL的方便灵活,总结了以下几点区别: 1.入参数据类型不要书写长度.比如:userNam ...

  7. LangChain基础篇 (02)

    LangChain 核心模块学习:Chains 对于简单的大模型应用,单独使用语言模型(LLMs)是可以的. 但更复杂的大模型应用需要将 LLMs 和 Chat Models 链接在一起. 要么彼此链 ...

  8. 数据存储“取经路”,HBlock轻松“渡”!

    近日,天翼云联合权威科技媒体InfoQ举办了以"新存储,更轻量"为主题的线上技术分享会.天翼云存储产品线总监武志民讲解了HBlock的创新设计和技术. 高性能·高可用·高可靠 自研 ...

  9. 用 Facebook Hydra 参数配置框架来简化程序配置

    用 Facebook Hydra 参数配置框架来简化程序配置 目录 用 Facebook Hydra 参数配置框架来简化程序配置 0x00 摘要 0x01 问题描述 0x02 概述 0x03 使用 3 ...

  10. ClickHouse常用操作

    一.客户端连接1.1 客户端连接ck./clickhouse-client -h 127.0.0.1 --port 9900 -u default --password 123456 -m 1.2 h ...