一、题目
要求:
- D的每个元素也是递增(a1 <= a2,不用去重)
- 不使用api.
- 时间复杂度O(N),本题N=25,所以只能循环25次; 空间复杂度O(1),除合并输出的空间$arrayD外,额外的空间大小不能与N相关。
*/
$arrayA = [52,63,64,75,86,89,110];
$arrayB = [76,79,310,311,413,515];
$arrayC = [12,13,14,27,29,40,42,43,54,57,99,1110];
function mergeArr($arrA, $arrB, $arrC)
{
$arrayD = [];
//...
//...
return $arrayD;
}
print_r(mergeArr($arrayA, $arrayB, $arrayC));
二、解答
<?php
$arrayA = [52, 63, 64, 75, 86, 89, 110];
$arrayB = [76, 79, 310, 311, 413, 515];
$arrayC = [12, 13, 14, 27, 29, 40, 42, 43, 54, 57, 99, 1110];
function mergeArr($arrA, $arrB, $arrC)
{
$arrayD = [];
$a = 0;
$b = 0;
$c = 0;
$endpoint = end($arrA) + end($arrB) + end($arrC);
for ($i = 0; $i < 25; $i++) {
$tmp = $arrA[$a];
if ($tmp > $arrB[$b]) {
$tmp = $arrB[$b];
if ($b < count($arrB)-1) {
++$b;
}else{
$arrB[$b] = $endpoint;
}
} elseif ( $tmp > $arrC[$c]) {
$tmp = $arrC[$c];
if ($c < count($arrC)-1) {
++$c;
}else{
$arrC[$c] = $endpoint;
}
} else {
if ($a < count($arrA)-1) {
++$a;
} else {
$arrA[$a] = $endpoint;
}
}
$arrayD[$i] = $tmp;
}
return $arrayD;
}
print_r(mergeArr($arrayA, $arrayB, $arrayC));