/**
* @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) {
// 因为最后n位都是0, 所以我们总最后开始重排不会对前面产生不好的影响
// 双指针法, i初始指向nums1自身数组末尾, j初始指向nums2数组末尾
let i = m-1, j = n-1, k = m+n-1;
// nums1或者num2遍历完毕就跳出循环, 把剩下的补充在前面
while(i>=0 && j>=0){
// 因为要求最后是非递减顺序, 所以我们倒序重排时候, 重大到小添加
if(nums1[i] > nums2[j]){
nums1[k--] = nums1[i--];
}else{
nums1[k--] = nums2[j--];
}
}
// 1、如果nums1原始数组在上面while循环内没有被遍历完. nums2被遍历完了
// 因为是倒序的, 所以nums1前面剩下的未遍历数据就不做处理, 直接得到答案
// 2、但如果num1被遍历完了, nums2两种情况: 有剩余或者没有, 再用while对nums2可能剩下的数据处理
while(j>=0){
nums1[k--] = nums2[j--]
}
};
leetcode 88. 合并两个有序数组
最新推荐文章于 2024-09-18 11:04:20 发布