题目:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
解题思路:
倒着往前放,
最后当某个放完了的话check一下,
如果是nums1的放完了,那还得把nums2的值复制过来,
如果是nums2的放完了,其实nums1的就在原地,不用动了。
代码:
function merge(&$nums1, $m, $nums2, $n) {
$index = $m + $n;
while ($m && $n) {
if ($nums1[$m-1] > $nums2[$n-1]) {
$nums1[$index-1] = $nums1[$m-1];
$m--;
} else {
$nums1[$index-1] = $nums2[$n-1];
$n--;
}
$index--;
}
//无需再check $m 了,毕竟他是在原地的。
while ($n) {
$nums1[$index-1] = $nums2[$n-1];
$index--;
$n--;
}
return null;
}
解题思路2:
先合并后排序,利用php内置方法array_merge(),sort()
代码:
class Solution {
/**
* @param Integer[] $nums1
* @param Integer $m
* @param Integer[] $nums2
* @param Integer $n
* @return NULL
*/
function merge(&$nums1, $m, $nums2, $n) {
$nums1 = array_slice($nums1, 0, $m);
$nums1 = array_merge($nums1, $nums2);
sort($nums1);
return $nums1;
}
}