题目

https://leetcode-cn.com/problems/merge-sorted-array/

解题

  1. /**
  2. * @param {number[]} nums1
  3. * @param {number} m
  4. * @param {number[]} nums2
  5. * @param {number} n
  6. * @return {void} Do not return anything, modify nums1 in-place instead.
  7. */
  8. // 思路:双指针,利用原数组有序,从后开始比较元素,填充到nums1中
  9. var merge = function(nums1, m, nums2, n) {
  10. let p1 = m - 1
  11. let p2 = n - 1
  12. let p = m + n - 1
  13. while(p1 >= 0 && p2 >= 0) {
  14. nums1[p --] = nums1[p1] > nums2[p2] ? nums1[p1 --] : nums2[p2 --]
  15. }
  16. // 如果p2 < 0说明nums2中的元素已经全部放入到nums1中,不需要其他操作
  17. // 如果p2 不小于0,说明nums1中的元素都往后移动了,将nums2中剩余的元素直接拼到nums1前面
  18. if (p2 >= 0) {
  19. nums1.splice(0, p + 1, ...nums2.slice(0, p2 + 1))
  20. }
  21. };