当前位置:网站首页>JSDay1-合并两个有序数组
JSDay1-合并两个有序数组
2022-08-08 22:43:00 【MonsterQy】
一、题目
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
二、示例
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
三、解法
方法一:先合并两个数组在排序:
力扣要求返回的是nums1数组,也就是说最后结果要存到nums1上,所以在nums1数组的基础上去将nums2上的元素加入。
var merge = function(nums1, m, nums2, n) {
nums1.splice(m,nums1.length-m,...nums2)
nums1.sort((a,b)=>a-b)
};
知识点一:splice用法
第一个参数:必需,表示从哪个位置开始增加/删除元素;
第二个参数:必需,表示删除元素的个数,0为不删
第三个参数:可选,增加的元素
知识点二:虽然sort默认为升序排序,但若直接.sort()无法正确对负数排序
时间复杂度+空间复杂度
时间复杂度:O(m+n)log(m+n)
空间复杂度:O(log(m+n))
方法二:正向双指针+额外空间
思路为双指针遍历两个待排序数组,比较大小加到新数组中,最后赋值回原数组
/** * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1 in-place instead. */
var merge = function(nums1, m, nums2, n) {
var p1=0,p2=0
var res=[]
while(p1<m||p2<n)
{
if(p1==m)
{
res.push(nums2[p2++])
}
else if(p2==n)
{
res.push(nums1[p1++])
}
else if(nums1[p1]<nums2[p2])
{
res.push(nums1[p1++])
}
else
{
res.push(nums2[p2++])
}
}
for(var i=0;i<m+n;i++)
{
nums1[i]=res[i]
}
};
时间复杂度+空间复杂度
时间复杂度:O(m+n)
空间复杂度:O(m+n)
方法三:逆向双指针
思路依旧为双指针遍历两个待排序数组,但是这次是逆向直接改变nums1数组,由题设知道nums1空间大小已经为m+n,所以数组后半部分是空的,我们就逆向遍历两数组,将较大的值赋值回原数组,这样就可以保证每个nums1中元素不会被覆盖
/** * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1 in-place instead. */
var merge = function(nums1, m, nums2, n) {
let index1=m-1
let index2=n-1
let right=m+n-1
let cur
while(index1>=0||index2>=0)
{
if(index1==-1)
{
cur=nums2[index2--]
}
else if(index2==-1)
{
cur=nums1[index1--]
}
else if(nums1[index1]>nums2[index2])
{
cur=nums1[index1--]
}
else{
cur=nums2[index2--]
}
nums1[right--]=cur
}
return nums1
};
时间复杂度+空间复杂度
时间复杂度:O(m+n)
空间复杂度:O(1)
边栏推荐
猜你喜欢
Liquor Daily Question ---- Find the nth Fibonacci number
laravel6框架跨域请求利器之 Laravel CORS 扩展包的安装和使用
sqli_libsLess-2 GET - Error based - Intiger based (基于错误的GET整型注入)
目标跟踪实战deepsort+yolov5(上)
Dynamic Host Configuration Protocol DHCP (DHCPv4)
一个PHP算法,php数组一个二维数组拆分成多个子数组
MPLS Virtual Private Network Everywhere in Life
从洞察到决策,一文解读标签画像体系建设方法论丨DTVision分析洞察篇
嵌入式开发:提示和技巧——C 语言中要避免的8个保留字
PHP7.2开发物流自动拣货机流程
随机推荐
Firewall first contact
The concept of GIL and pools
MES对接Simba实现展讯平台 IMEI 写号与耦合测试
postman request+加密解密
internship:一般的原有项目功能优化的具体步骤
Kubernetes 资源编排系列之二: Helm 篇
win10电脑安装Photoshop cs7软件版本
PHP7.2开发物流自动拣货机流程
Upload-labs Pass-05
Upload-labs Pass-02(MIME验证)
Unity BMFont自定义字体
股市预测,销量预测,病毒传播...一个时间序列建模套路搞定全部!
微服务架构的核心关键点
深耕“有效私域”,雀巢集团携手腾讯重塑零售数字化体验
U disk cannot be displayed on computer
人人熟知的IPV6竟然还有这么多细节
Unity工程安全地修改脚本名、变量名,不丢失现有的引用
让IPv6强大的关键——NDP邻居发现协议
ZCANPRO 通道配置方法
按键精灵 删除文件 命令