合并两个有序数组-面试算法题(非常详解)

前言(自我介绍)

介绍一下,软件工程大四学生。找工作阶段,方向是前端。我的情况是会html,css,js,vue,uni-app语言开发过小程序和app,没有任何实习经验和比赛经历。最近在某些招聘软件上疯狂投递简历,回复极少,目前收到两家公司面试邀请,已经参加过一次面试了。也正因为如此,才有了这篇文章。我先说说我面试的情况,我面试的岗位是前端开发实习生。笔试环节,会给一套前端的题,题型就是填空题和代码题。填空题会问一些有关html,css,js,vue的基础知识。比如第一道题是,“前端开发中所说的‘结构和表现’是指什么?”我当时内心:‘????’其实就是html和css,但是当时我就是想不起来,要是说‘结构和表现和行为是指’,可能我就能答上来了。其实题目不难,就是平时一听就懂的基础知识。所以,对于基础理论知识这块,要有个大概的了解框架,能自述出来最好。再其次就是代码题,代码题是考算法并手写出来,我当时遇到的是‘找出一个字符串中出现频率最高的字符,并且输出频率是多少?’,这道题,我在力扣上看到过,但是我当时觉得不重要,感觉根本用不上,就没看了。后来我才知道,他的实用场景有很多,只是我不知道而已。存在即合理这句话还是有道理的。所以,我决定每天刷一道算法题。我会在这里持续更新我的做题笔记,每一行代码,详细解释。如果你现在是大一大二的同学,还不知道以后从事什么方向的话,很值得来看看我的这个系列,因为你有大把时间为以后打基础。如果是大三大四同学,想必以后有自己的职业规划了,也是想从事开发岗的,这个系列也许能帮到你。如果是已经工作的大佬刷到这篇文章,希望能给出更好的建议哦!(我下面解算法用的语言是js)

题目描述

请你 合并 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 中。

解法

方法一:直接合并后排序

最直观的方法就是将nums2放入nums1尾部,然后重新排列

var merge = function(nums1, m, nums2, n) {
    nums1.splice(m, nums1.length - m, ...nums2);
    nums1.sort((a, b) => a - b);
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/merge-sorted-array/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

详解:splice() 和 sort()

这是一个js函数,其作用就是两个已排序的数组 nums1 和 nums2 合并成一个排序后的数组,并将结果存储在数组 nums1 中。

nums1.splice(m, nums1.length - m, ...nums2);

该函数使用 splice() 方法将 nums2 插入到 nums1 中原有元素的后面。

nums1.sort((a, b) => a - b);

然后,使用 JavaScript 内置的 sort() 方法对 nums1 进行排序。其中,sort括号里内容可换为 function(a,b){return b-a} 是同样意思 ,这是一个匿名函数,就是箭头函数。(下面是该函数的使用示例)

// 升序
var arr = [3,2,3,34,12,23,234,84,9];
arr.sort(function (a, b) {
    return a - b;
});
// 结果:2,3,3,9,12,23,34,84,234
 
// 降序
var arr = [3,2,3,34,12,23,234,84,9];
arr.sort(function (a, b) {
    return b - a;
});
// 结果:234,84,34,23,12,9,3,3,2

需要注意的是,原数组 nums1 将被改变,而不是返回一个新的数组。

其中涉及到的两个重要方法(点击即可跳转到该方法详细使用说明文章):
1.splice()该方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
2. sort()该方法用于对数组的元素进行排序。

ps:后续有更好方法会持续更新文章哦!欢迎在评论区讨论,创作不易,给我赞赞支持一下呗!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值