88. 合并两个有序数组

思路

双指针法。

利用双指针从尾部遍历,即 nums1 从 m - 1 处向前,nums2 从 n - 1 处向前。

由于 nums1 已经开辟了足够的空间,遍历两个数组时比较谁大,谁插入 nums1 的尾部。

可能会出现一种特殊情况,nums1 的 m 指针已经到 -1 了,但 nums2 的 n 指针还没遍历完,最后直接把他塞入 nums1 中即可。

复杂度

时间复杂度:O(n)

空间复杂度:O(1)

代码

class Solution {

    /**
     * @param Integer[] $nums1
     * @param Integer $m
     * @param Integer[] $nums2
     * @param Integer $n
     * @return NULL
     */
    function merge(&$nums1, $m, $nums2, $n) {
        $i = count($nums1) -1;

        $m = $m - 1;
        $n = $n - 1;
        while($m >=0 && $n >= 0) {
            if($nums1[$m] >= $nums2[$n]) {
                $nums1[$i] = $nums1[$m];
                $m--;
            } else {
                $nums1[$i] = $nums2[$n];
                $n--;
            }

            $i--;
        }

        if($n >= 0) {
            while($n >= 0) {
                $nums1[$i] = $nums2[$n];
                $n--;
                $i--;
            }
        }

        return $nums1;
    }
}

results matching ""

    No results matching ""