JS-合并两个有序的数组
个人学习笔记
题目要求:
给出一个整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
注意:
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了
3. A 数组在[0,m-1]的范围也是有序的
示例1:
输入:
[4,5,6],[1,2,3]
返回值:
[1,2,3,4,5,6]
复制
说明:A数组为[4,5,6],B数组为[1,2,3],后台程序会预先将A扩
容为[4,5,6,0,0,0],B还是为[1,2,3],m=3,n=3,传入到函数merge
里面,然后请同学完成merge函数,将B的数据合并A里面,
最后后台程序输出A数组
思路:
1.首先根据题目的要求可以知道A数组有足够的长度来同时存放自身的数据
和B数组的数据
2.分别定义三个指针
let index = m + n - 1 // index指针指向扩容后数组A的最后的一个位置
let i = m - 1 // i指针指向扩容前数组A的最后一个元素的位置
let j = n - 1 // j指针指向B数组的最后一个元素的位置
3.三个指针根据相应的条件向前移动
如果数组B[j] > A[i] 就将B[j]赋值给当前的index指针的位置
反之就赋值A[i],之后将和符合要求的数组指针和index指针 同时 --
4.如此反复判断赋值即可
注意:这里回出现一个问题如果A数组的第0个位置的元素都比B数组最后一个
位置的数据还大的话,B数组还没遍历完的时候就已经跳出循环了,所以在最后
要判断一下B数组是否还有数据没有合并,如果没有就结束,如果有那么此时
就只需将数组B完整的丢进数组A即可
代码实现:
function merge( A, m, B, n ) {
// write code here
// 思路2
let index = m + n -1
let i = m - 1
let j = n - 1
while(i >= 0 && j >= 0)
// 思路3
A[index --] = A[i] >= B[j] ? A[i --] : B[j --]
// 思路4
while(j >= 0) A[index --] = B[j --]
}