/** * https://leetcode.cn/problems/merge-sorted-array/?envType=study-plan-v2&envId=top-interview-150 * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1 in-place instead. */ const merge = function (nums1, m, nums2, n) { let p1 = m - 1; // 指向nums1的末尾 let p2 = n - 1; // 指向nums2的末尾 let p = m + n - 1; // 指向nums1 填充部分的末尾 while (p1 >= 0 && p2 >= 0) { if (nums1[p1] > nums2[p2]) { nums1[p] = nums1[p1]; p1--; } else { nums1[p] = nums2[p2]; p2--; } p--; } // 如果nums2中有未移动的数据,全部移动到nums1中 while (p2 >= 0) { nums1[p] = nums2[p2]; p2--; p--; } }; // 思考:如果p1>=0,还需要全部移动一遍吗?答案是否定的,因为原本就是有序的,如果nums2处理完毕之后,就表示整个拼接好的nums1 // 就是有序的,只需考虑 p2>=0 的情况 // 其他方法,直接合并两个数组,再对其排序,简单粗暴