每天学点新东西

NO.3 合并两个有序数组

2020-10-15  本文已影响0人  山豆山豆

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3

输出:[1,2,2,3,5,6]

//思路 从后往前遍历 比较两个数组 尾部较大的哪个值, 谁的值大,
// 就把谁的值 放到num1的尾部, 然后向左移动 尾部索引 p 
function marge(nums1, m, nums2, n){
    let p1=m-1;
    let p2=n-1;
    // let p=m+n-1;

    for (var p=m+n-1;  p>=0;p--) {
        if(p1>=0&&p2>=0){
            if(nums1[p1]>=nums2[p2]){
                nums1[p]=nums1[p1]
                p1--
            }else{
                nums1[p]=nums2[p2]
                p2--
            }
        }else if(p1>=0){
            nums1[p]=nums1[p1]
                p1--
        }else if(p2>=0){
            nums1[p]=nums2[p2]
                p2--
        }
        
    }
    return nums1
}
console.log(marge([1,2,3,7,0,0,0],4,[2,5,6],3))

下面是思路相同 但是写法更风骚的
关键字 Infinity 是无限大 -Infinity就是无限小

var merge = function(nums1, m, nums2, n, l) {
    l = m + n, m--, n--
    while(l--) {
        nums1[l] = (nums2[n] === undefined ? -Infinity : nums2[n]) >= (nums1[m] === undefined ? -Infinity : nums1[m]) ? nums2[n--] : nums1[m--]
    }
};

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

上一篇 下一篇

猜你喜欢

热点阅读