合并3个递增数组 A, B, C,输出到D.

一、题目

要求:

  1. D的每个元素也是递增(a1 <= a2,不用去重)
  2. 不使用api.
  3. 时间复杂度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));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值