题目
思路
逆向双指针,从尾部开始填充数组
代码
逆向双指针:注意这里其实是有四个不同的状态的
状态1: A的指针到了-1 , 也就是说A已经遍历完了
状态2: B的指针到了-1,也就是说B已经遍历完了
状态3: A、B都没有遍历完,A >= B
状态4: A、B都没有遍历完,A < B
/**
* @param {number[]} A
* @param {number} m
* @param {number[]} B
* @param {number} n
* @return {void} Do not return anything, modify A in-place instead.
*/
var merge = function(A, m, B, n) {
//逆向双指针
let a = m - 1;
let b = n - 1;
let end = m + n - 1;
let cur;
while(end >= 0){
if (a === -1 || A[a] < B[b]){
cur = B[b--];
}else{
cur = A[a--];
}
A[end--] =cur;
}
return A;
};