[每日算法] 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题:合并两个有序数组的更多相关文章
- 【python】【补】Leetcode每日一题-合并两个有序数组
[python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...
- leetcode 88. C++ 合并两个有序数组
Leetcode 88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 ...
- leetcode第四题:两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- Leetcode 88:合并两个有序数组
Leetcode链接 : https://leetcode-cn.com/problems/merge-sorted-array/ 问题描述: 给定两个有序整数数组 nums1 和 nums2,将 n ...
- 【leetcode 简单】第二十题 合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...
- python3实现合并两个有序数组
很早就听同学和师兄经常说刷题很重要,然而编程能力一直都很渣的我最近才开始从leetcode的初级算法开始.今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲 ...
- [LeetCode每日一题]88. 合并两个有序数组
[LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...
- 每日一道 LeetCode (19):合并两个有序数组
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- LeetCode系列之 (JavaScript) => 88. 合并两个有序数组
题目描述: [Leetcode 题目链接]:88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com) 解题思路分析: 在nums1中找到nums2 插入的位置,然后在 ...
- Leetcode#88. Merge Sorted Array(合并两个有序数组)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
随机推荐
- OpenMMLab AI实战营 第六课笔记
OpenMMLab AI实战营 第六课笔记 目录 OpenMMLab AI实战营 第六课笔记 1.什么是语义分割 1.1 语义分割的应用 1.1.1 应用:无人驾驶汽车 1.1.2 应用:人像分割 1 ...
- Verilog3_组合逻辑电路
组合逻辑电路设计方法 使用assign语句: 描述简单的组合逻辑电路 使用always块: 描述复杂的组合逻辑电路 要点: 只在一个always模块中对某一变量进行赋值: 将所有敏感变量列在敏感变量列 ...
- SQL统计数据之总结
一.查询SQL SELECT t1.规则编号 AS 编码, t1.规则描述 AS 名称, SUM( CASE WHEN t3.DATA_SOURCES = '00' THEN 1 ELSE 0 END ...
- 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 ...
- openSSL学习-1
上一节[openSSL学习-0]了解openSSL和安装,本节以des.h为例,学习DES分组密码算法 DES 加密分组 调用函数,实现一个分组的加解密(DES-ECB模式) #include < ...
- SQL Server与ORACLE数据库存储过程编写的几个不同之处
一直在使用SQL Server数库的存储过程进行业务数据处理,现在ORACLE上进行存储过程应用,感觉没有MSSQL的方便灵活,总结了以下几点区别: 1.入参数据类型不要书写长度.比如:userNam ...
- LangChain基础篇 (02)
LangChain 核心模块学习:Chains 对于简单的大模型应用,单独使用语言模型(LLMs)是可以的. 但更复杂的大模型应用需要将 LLMs 和 Chat Models 链接在一起. 要么彼此链 ...
- 数据存储“取经路”,HBlock轻松“渡”!
近日,天翼云联合权威科技媒体InfoQ举办了以"新存储,更轻量"为主题的线上技术分享会.天翼云存储产品线总监武志民讲解了HBlock的创新设计和技术. 高性能·高可用·高可靠 自研 ...
- 用 Facebook Hydra 参数配置框架来简化程序配置
用 Facebook Hydra 参数配置框架来简化程序配置 目录 用 Facebook Hydra 参数配置框架来简化程序配置 0x00 摘要 0x01 问题描述 0x02 概述 0x03 使用 3 ...
- ClickHouse常用操作
一.客户端连接1.1 客户端连接ck./clickhouse-client -h 127.0.0.1 --port 9900 -u default --password 123456 -m 1.2 h ...