【leetcode】88. 合并两个有序数组

38 阅读1分钟

leetcode-88.png

这一题要求在nums1上面进行返回,nums1数组上已经给了空位了。
记得之前还有其他题目是在原数组上面操作,去重之类的,忘记多少题, 这种就是后面往前面挪动就好了,前面弄一个index慢慢自增就能解决
这里的这题也差不多是相同的思路,只不过是从尾部开始的,如果从头部开始,就要挪动元素,操作的次数就变多了。

var merge = function (nums1, m, nums2, n) {
    let i = m - 1
    let j = n - 1
    let index = m + n - 1
    while (i >= 0 && j >= 0) {
        if (nums1[i] >= nums2[j]) {
            nums1[index--] = nums1[i--]
        } else {
            nums1[index--] = nums2[j--]
        }
    }
    // 如果是 nums1 剩余下元素,那么就不需要操作了
    // nums2 剩余元素,就要全部挪动到 nums1 上面去
    while (j >= 0) {
        nums1[index--] = nums2[j--]
    }
};