PHP实现 两个有序数组合并成新的一个有序数组 并去重

实现合并有序数组

  1. 一种使用PHP内置函数进行实现
  2. 一种通过循环进行实现

内置函数

$a = array_unique(array_merge($map,$map1));
sort($a);

解释下函数的作用

  • array_merge(a,b,c) 把多个数组进行合并
  • array_unique(a) 把数组里面相同的数值去重
  • sort(a) 把数组排序

循环实现

function merge($map, $map1) {
    $ans = [];
    $len = count($map);
    $len1 = count($map1);
    $a = $b = 0;
    while ($len != $a && $len1 != $b) {
        if ($map[$a] > $map1[$b]) {
            $ans[] = $map1[$b];
            $b++;
        } else if ($map[$a] < $map1[$b]) {
            $ans[] = $map[$a];
            $a++;
        } else {
            $ans[] = $map1[$b];
            $b++;
            $a++;
        }

    }
    if ($len == $a) {
        for ($i = $b; $b < $len1; $b++) {
            $ans[] = $map1[$b];
        }
    } else {
        for ($i = $a; $a < $len; $a++) {
            $ans[] = $map[$a];
        }
    }
    return $ans;
}

整体思路

  • 创建一个新的数组。
  • 获取两个数组的长度,并给每个数组设置一个从0开始的索引变量。
  • 然后对两个数组的当前索引对应的值进行比较,大的放入新的数组,并给该索引+1,相同则把相同值放入数组,两个索引都+1。
  • 当某个索引值等于对应的长度时,则表明其中一个已经遍历完,退出循环。
  • 然后把另外一个数组剩余的数值遍历进数组,即完成

时间复杂度

  • 内置函数时间复杂度 不了解内部实现结构 所以这里就 ?
  • 循环时间复杂度 o(m+k)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值