88.合并两个有序数组

234 阅读1分钟

//两种方法 双指针 从后面或前面 或者先合并再排序
//1.合并然后排序
var merge = function(nums1, m, nums2, n) {
    nums1.splice(m,n);
    nums1.splice(0,0,...nums2);
    nums1.sort((a, b) => a-b);
};
//2.从前面双指针
var merge = function (nums1, m, nums2, n) {
            let res = [];
            let p1 = 0, p2 = 0;
            while (p1 != m && p2 != n) {
                if (nums1[p1] < nums2[p2]) {
                    res.push(nums1[p1]);
                    p1++;
                }
                else {
                    res.push(nums2[p2]);
                    p2++;
                }
            }
            if (p1 == m) {
                let nums2Slice = nums2.slice(p2, n);
                res = res.concat(nums2Slice);
            }
            else {
                let nums1Slice = nums1.slice(p1, m);
                res = res.concat(nums1Slice);
            }
            res.forEach((item, index) => {
                nums1[index]= item;
            })

        };
//双指针从后面开始
var merge = function(nums1, m, nums2, n) {
    let cur = nums1.length -1, p1 = m - 1, p2 = n - 1; 
    while(p2>=0) {
        nums1[p1]>nums2[p2] ? nums1[cur--] = nums1[p1--] : nums1[cur--] = nums2[p2--];
    }
};