LeetCode 88: Merge Sorted Array solution

class Solution {

    /**
     * @param Integer[] $nums1
     * @param Integer $m
     * @param Integer[] $nums2
     * @param Integer $n
     * @return NULL
     */
    function merge(&$nums1, $m, $nums2, $n) {
        if ($n == 0) {
            return;
        }
        
        if ($m == 0) {
            for ($i=0; $i<$n; $i++) {
                $nums1[$i] = $nums2[$i];
            }
        }
        
        $i = 0;
        $j = 0;
        
        while ($i<$m && $j<$n) {
            if ($nums1[$i]<=$nums2[$j]) {
                $i++;
            } else {
                $this->array_insert($nums1, $i++, $nums2[$j]);
                $m++;
                $j++;
            }   
        }
        
        while ($j < $n) {
            $nums1[$i++] = $nums2[$j++];
        }
        
    }
    
    function array_insert(&$arr, $i, $num) {
        $endArr = array_slice($arr, $i);
        $arr[$i] = $num;
        
        for ($x=$i+1; $x<count($arr); $x++) {
            $arr[$x] = array_shift($endArr);
        }
    }
}

Not very clean but this will do for now. Ref: https://leetcode.com/problems/merge-sorted-array/

Leave a Reply

Your email address will not be published. Required fields are marked *