【面试经典150题】合并两个有序数组-JavaScript版

题目来源

初始思路:同时循环遍历两个数组,选出较小元素放入新数组。剩下一个没有被遍历完的数组的剩余元素直接拼接到新数组后。

错误示例

var merge = function (nums1, m, nums2, n) {let i = 0,j = 0,nums3 = [];while (i < m && j < n) {if (nums1[i] <= nums2[j]) {nums3.push(nums1[i++]);} else {nums3.push(nums2[j++]);}}if (i < m) {nums3 = nums3.concat(nums1.slice(i, m));}if (j < n) {nums3 = nums3.concat(nums2.slice(j, n));}nums1 = nums3;
};

nums1 = nums3 不会改变原数组,这样做只是改变了参数nums1指向了nums3的内容,但是原nums1内容并没有改变


正确示例1

var merge = function (nums1, m, nums2, n) {let i = 0,j = 0,nums3 = [];while (i < m && j < n) {if (nums1[i] <= nums2[j]) {nums3.push(nums1[i++]);} else {nums3.push(nums2[j++]);}}if (i < m) {nums3 = nums3.concat(nums1.slice(i, m));}if (j < n) {nums3 = nums3.concat(nums2.slice(j, n));}for (let i = 0; i < nums1.length; i++) {nums1[i] = nums3[i];}//nums1.splice(0, nums1.length, ...nums3);
};

直接改变nums1对应的区域的值。

注意使用splice方法会有一定的空间损耗

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

空间复杂度 O ( m + n ) O(m+n) O(m+n)

正确示例1可以优化的地方:辅助数组nums3可以不用,我们从后往前遍历,依次选择较大的填入nums1。


正确示例2省去nums3数组

数组nums1长度为m+n,后面有n个空位,我们先将较大的元素从后往前填入nums1,由于空位数恰好等于nums2长度,所以nums1元素不会有丢失风险,当nums1遍历完或nums2遍历完,将可能剩余的nums2全部填入nums1,nums1可能没遍历完这种情况不影响结果。

var merge = function(nums1, m, nums2, n){let i = m - 1, j = n - 1, k = m + n - 1;while(i>=0&&j>=0){if(nums1[i]>nums2[j]){nums1[k--]=nums1[i--];}else{nums1[k--]=nums2[j--];}}while(j>=0){nums1[k--]=nums2[j--];}// nums1.splice(0,j+1,...nums2.slice(0,j+1));
}

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

空间复杂度 O ( 1 ) O(1) O(1)

小伙伴们有更好的解法吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/51694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制

JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作&#xff0c;例如AJAX&#xff0c;setTimeout等等&#xff1b;也有很多事件&#xff0c;例如用户触发的点击事件&#xff0c;鼠标…

[rk3568 RetroArch介绍游戏模拟器]

buildroot 添加 https://github.com/aduskett/retroarch-buildroot RetroArch 是款功能强大的跨平台模拟器&#xff0c;不但能够模拟许多不同的游戏主机&#xff0c;并且提供开源代码&#xff0c;可以 移植在Linux, Window, Android 等主流操作平台上。 RetroArch 的 API 的实现…

浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用

夏日已至&#xff0c;台风和暴雨等极端天气频繁出现。在城市运行过程中&#xff0c;台风所带来的暴雨可能会导致城市内涝等次生灾害&#xff0c;引发交通瘫痪、地铁停运、管网泄漏爆管、路面塌陷、防洪排涝、燃气爆炸、供热安全、管廊安全、消防火灾等安全隐患&#xff0c;影响…

性能优化——分库分表

1、什么是分库分表 1.1、分表 将同一个库中的一张表&#xff08;比如SPU表&#xff09;按某种方式&#xff08;垂直拆分、水平拆分&#xff09;拆分成SPU1、SPU2、SPU3、SPU4…等若干张表&#xff0c;如下图所示&#xff1a; 1.2、分库 在表数据不变的情况下&#xff0c;对…

【Unity3D赛车游戏】【四】在Unity中添加阿克曼转向,下压力,质心会让汽车更稳定

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

C++实现字符串的逆置

目录 C和C的区别 【1】C对C的扩充 【2】C对C的兼容 第一个C程序 【1】hello world 【2】cout标准输出流对象 i&#xff09;介绍 ii&#xff09;运算 iii&#xff09;cout的使用 iv&#xff09;使用cout指定格式的输出 练习&#xff1a;1、输出斐波那契的前10项。 【3】…

《Linux从练气到飞升》No.17 进程创建

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

VB超市配送运输管理系统设计与实现

摘要: 连锁经营从九十年代初进入中国市场以来,由于具有批量进货、集中配送、统一管理、统一价格的优点,表现出良好的发展势头。发展连锁业,配送中心的建设是关键。本文以我国某大型连锁超市的配送中心信息化管理为实际背景,介绍了连锁超市配送中心运输管理信息系统设计开发…

开学需要买哪些电容笔?ipad可以用的手写笔

因为iPad的功能亮眼&#xff0c;让iPad的用户越来越多&#xff0c;并且越来越受欢迎。用来画画、做笔记都很有用&#xff0c;但要是用来看电视、打游戏的话&#xff0c;使用价值就显得低了。如果你不想买一支价格不菲的苹果电容笔&#xff0c;或是只是想要日常用于书写记录&…

Day04-Vue基础-监听器-双向绑定-组件通信

Day04-Vue基础-监听器-双向绑定-组件通信 一 侦听器 语法一 <template><div>{{name}}<br><button @click="update1">修改1</button><

【云原生】Docker Cgroups资源控制管理

目录 一、cgroups简介 cgroups有四大功能&#xff1a; 二、cpu时间片的概念 三、对CPU使用的限制 3.1 设置CPU使用率上限 &#xff08;1&#xff09;查看容器的默认CPU使用限制 &#xff08;2&#xff09;进行压力测试 &#xff08;3&#xff09;创建容器时设置CPU使用时…

Linux下套接字TCP实现网络通信

Linux下套接字TCP实现网络通信 文章目录 Linux下套接字TCP实现网络通信1.引言2.具体实现2.1接口介绍1.socket()2.bind()3.listen()4.accept()5.connect() 2.2 服务器端server.hpp2.3服务端server.cc2.4客户端client.cc 1.引言 ​ 套接字(Socket)是计算机网络中实现网络通信的一…

Linux笔记--Ubuntu设置sftp服务

目录 1--修改配置文件 2--注销代码 3--更改代码 4--重启服务 1--修改配置文件 vim /etc/ssh/sshd_config 2--注销代码 ① 注销&#xff1a; Subsystem sftp /usr/libexec/openssh/sftp-server ② 更改为&#xff1a; Subsystem sftp internal-sftp 3--更改代码 Per…

浙大陈越何钦铭数据结构07-图6 旅游规划

题目: 有了一张自驾旅游路线图&#xff0c;你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序&#xff0c;帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的&#xff0c;那么需要输出最便宜的一条路径。 输入…

Java——面向对象编程思想

前言 如果有人问你&#xff0c;C和Java的区别是什么呢&#xff1f; 我想大部分人肯定脱口而出的是&#xff1a;C是面向过程的&#xff0c;Java是面向对象的。 那如何理解面向过程和面向对象呢&#xff1f; 首先&#xff0c;面向过程和面向对象都是编程思想。 ①面向过程&#…

【3Ds Max】可编辑多边形“边界”层级的简单使用

目录 示例 &#xff08;1&#xff09;挤出 &#xff08;2&#xff09;插入顶点 &#xff08;3&#xff09;切角 &#xff08;4&#xff09;利用所选内容创建图形 &#xff08;5&#xff09;封口 &#xff08;6&#xff09;桥 示例 这里我们首先创建一个长方体&#xff…

【Java面试】指令重排引发问题及解决方案

一 指令重排引发的问题 什么是指令重排&#xff1f; 指令重排是指在程序执行过程中&#xff0c;为了优化性能&#xff0c;编译器或处理器可能会重新安排代码指令的执行顺序&#xff0c;但要求不改变程序的最终结果。 在多线程环境中&#xff0c;指令重排可能会引发一些问题&a…

C#使用xamarin进行跨平台开发

使用 Xamarin 进行跨平台开发可以使用 C# 和 .NET 平台来开发移动应用程序&#xff0c;同时将代码在多个主要移动操作系统上运行&#xff0c;包括 Android 和 iOS。以下是在 C# 中使用 Xamarin 进行跨平台开发的一般步骤&#xff1a; 安装 Xamarin&#xff1a; 在开始之前&…

Java基础之IO流File类创建及删除

1.File类概述及构造方法 2.File类创建功能 文件创建成功&#xff01; 如果文件不存在&#xff0c;就创建文件&#xff0c;并返回true 如果文件存在&#xff0c;就不创建文件&#xff0c;并返回false 如果文件夹不存在&#xff0c;就创建文件夹&#xff0c;并返回true 如果文件…

html学习第2篇---标签(1)

html学习第2篇---标签 1、标题标签h1---h62、段落标签p3、换行标签br4、文本格式化标签5、div标签和span标签6、图像标签img6.1、图像属性6.2、相对路径、绝对路径 7、超链接标签a7.1、属性7.2、分类 8、注释标签和特殊字符8.1、注释8.2、特殊字符 1、标题标签h1—h6 为了使网…