LeetCode------合并两个有序数组(4)【数组】
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
1、题目
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
示例 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 中。
2、第一种求解方法
先将两个数组合并为一个数组,然后调用api中的自动排序方法。sort使用的是快速排序
使用API

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);
}
}

3、第二种解法
辅助数组,然后使用两个指针分别指向两个数组的开始索引位置。比较两个索引数据大小,较小的放入辅助数组,然后指针加1(索引指向下一个元素)。然后继续比较
当两个数组大小不一致的时候,当比较结束其中一个数组时,将剩下的数组中的数据依次放入辅助数组。
最后在将辅助数组赋值给之前的数组。
使用辅助数组、会增加内存空间的消耗。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n){
int k =m+n;
int [] temp = new int[k];
int nums1Index=0,nums2Index=0;
for(int index=0;index < k;index++){
if(nums1Index >=m){
temp[index]=nums2[nums2Index++];
}else if(nums2Index >= n){
temp[index] = nums1[nums1Index++];
}else if(nums1[nums1Index]>nums2[nums2Index]){
temp[index] = nums2[nums2Index++];
}else{
temp[index] = nums1[nums1Index++];
}
}
for(int i=0;i<k;i++){
nums1[i]=temp[i];
}
}
}

3、第三种解法
依然采取双指针的形式,指针指向两个数组的尾部。然后比较大小,将较大的数据放入数组的最后位置、同时移动该索引的位置。这样就可以避免辅助数组的使用。

class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n){
int k=m+n;
int nums1Index = m-1,nums2Index = n-1;
for(int index =k-1;index>=0;index--){
if(nums1Index < 0){
nums1[index]=nums2[nums2Index--];//nums1已经拿完,只需拿nums2
}else if(nums2Index < 0){
break;//nums2的已经拿完,nums1的不需要在动
}else if(nums1[nums1Index]>nums2[nums2Index]){
nums1[index] = nums1[nums1Index--];
}else{
nums1[index] =nums2[nums2Index--];
}
}
}
}

LeetCode------合并两个有序数组(4)【数组】的更多相关文章
- leetcode 合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: - 初始化 nums1 和 nums2 的元素数量分别为 m 和 ...
- Leetcode:合并两个有序链表
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return ...
- leetcode 88. C++ 合并两个有序数组
Leetcode 88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 ...
- 每日一道 LeetCode (19):合并两个有序数组
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- 【python】【补】Leetcode每日一题-合并两个有序数组
[python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...
- [LeetCode每日一题]88. 合并两个有序数组
[LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...
- Leetcode#88. Merge Sorted Array(合并两个有序数组)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- Leetcode 88 合并两个有序数组 Python
合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分 ...
- Java实现 LeetCode 88 合并两个有序数组
88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元 ...
- 【LeetCode】88. 合并两个有序数组
88. 合并两个有序数组 知识点:数组:排序:双指针: 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 ...
随机推荐
- 「Python实用秘技10」深度比较Python对象间差异
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第10 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(10)-Fiddler如何设置捕获Firefox浏览器的Https会话
1.简介 经过上一篇对Fiddler的配置后,绝大多数的Https的会话,我们可以成功捕获抓取到,但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话,需要我们更进一步的配置才能捕获到会 ...
- Luogu P1903 [国家集训队]数颜色 / 维护队列 (带修莫队)
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...
- docker hung住问题排查
背景:这个是之前遇到的老问题. # systemctl status lxcfs● lxcfs.service - FUSE filesystem for LXC Loaded: loaded (/u ...
- 未来的可再生能源电网!FREEDM 论文阅读
全文主旨[省时间快读] 背景: 论文标题:The Future Renewable Electric Energy Delivery and Management (FREEDM) System: T ...
- 【MySQL】从入门到精通9-数据库的备份(完结)
上期:[MySQL]从入门到精通8-SQL数据库编程 第一章:数据的导出 回到我们的Workbench. 选择Data Export. 选择需要导出的数据库. 注意,如果选择"Export ...
- KingbaseES R6 集群创建流复制只读副本库案例
一.环境概述 [kingbase@node2 bin]$ ./ksql -U system test ksql (V8.0) Type "help" for help. test= ...
- JavaWeb核心篇(3)——JSP,MVC,三层架构
JavaWeb核心篇(3)--JSP,MVC,三层架构 在本篇文章中我们会学习到JSP,MVC,三层架构 虽然JSP已经快被时代所淘汰,但是在一些老旧的工作场所还是有在使用,所以了解一下也不为过 至于 ...
- 常用MySQL语句(持续更新)
1. 客户端登录 在终端输入 mysql -u[用户名] -p[密码] 2. 数据库级别操作 // 创建数据库 create database [db name]; // 查看数据库列表 show d ...
- WSUS下载速度和BITS服务
近日,新装了一台WSUS服务器.选择好需要同步的补丁类型和语言版本后开始等待同步.通过过程异常缓慢,速度一直上不去.同步了一整天才30G,同步3T数据需要100天.这样肯定没办法用,所以要想办法提高下 ...