中継コード統合送信アレイ


私の第1ラウンド

var merge = function(nums1, m, nums2, n) {
    let p1 = 0;
    let p2 = 0;
    let count = 0;
    while (p2 < n) {
        if (nums2[p2] >= nums1[p1] && nums2[p2] <= nums1[p1+1]) {
            nums1.splice(p1+1, 0, nums2[p2]);
            nums1.pop();
            p2++;
            count++;
        }
        p1++;
        if (p1 === count+m) break;
    }
    let count2 = count;
    for (let i = p1; i < p1+n-count2; i++) {
        nums1[i] = nums2[count];
        count++;
    }
};
この解答[0]、0,[1]、1が一緒にビットインすると、処理できません.いくつかの反例を加えて,アルゴリズム自体に多くの脆弱性があることが分かった.別の方法で解くのが正しいようです.

私の2回目の答え

var merge = function(nums1, m, nums2, n) {
    let p1 = 0;
    let p2 = 0;
    let count = 0;
    
    if (m === 0) {
        for (let i = 0; i < n; i++) {
            nums1.splice(i,1,nums2[i]);
        }
    } else {
        while (p2 < n) {
            if (nums2[p2] <= nums1[p1]) {
                nums1.splice(p1, 0, nums2[p2]);
                nums1.pop();
                p2++;
                count++;
            }
            p1++;
            if (p1 === count+m) break;
        }
        let count2 = count;
        for (let i = p1; i < p1+n-count2; i++) {
            nums1[i] = nums2[count];
            count++;
        }
    }
};
whileはゲート直下のifクエリー条件を緩和し,mが0の場合に異常処理を行い,完了した.

他人の解答


nums 2をnums 1の後ろに貼ってsortを行います.問題はnums 1を返す方法では解けないので、解けなかったので、そうする必要はないようです.