给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组
注意:
可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n
<?php
/**
* @param $arrA
* @param $m
* @param $arrB
* @param $n
* 一开始在想要这个m和n干什么,直接从左向右插入就可以了,
* 但是每插入一次就要把后面的所有元素向后平移,代价较高
* 但是如果有m和n就可以确定A最后会变成一个多大的数组,直接从后往前搞就行了
*/
function merge($arrA, $m, $arrB, $n) {
$i = $m - 1;
$j = $n - 1;
$x = $m + $n - 1;//merge后A的位置
while ($i >= 0 || $j >= 0) {
if (($i >= 0 && $arrA[$i] >= $arrB[$j]) || $j < 0) {
$arrA[$x] = $arrA[$i];
$i --;
} else {
$arrA[$x] = $arrB[$j];
$j --;
}
$x --;
}
for ($k = 0; $k <= $m + $n -1; $k ++) {
print $arrA[$k] . "\n";
}
}
$arrA = [1,3,4,5,6];
$arrB = [7,8,9];
merge($arrA, 5, $arrB, 3);