You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP技术实现:找出使两数组相等的最小正整数及目标数组

解决PHP中通过添加最小正整数使两数组相等的问题

嗨,刚接触PHP不用慌,我来一步步帮你解决这个问题!针对你的需求,我们可以拆解成几个清晰的步骤来实现,还会帮你补全一些前提验证的细节,避免踩坑。

先理清楚需求逻辑

你的例子里,arr1=[1,1,7,2]和arr2=[1,13,2,1],排序后分别是[1,1,2,7]和[1,1,2,13],唯一的差异是7和13。差值是6,把这个正整数加到arr1的7上,两个数组就完全相等了,所以输出6 1。

核心要求是:

  • 找到最小的正整数
  • 确定要加到arr1还是arr2的某个元素上
  • 仅当两数组只有一对元素差异时才生效

实现步骤与代码

我会写一段注释详细的代码,每一步都给你解释清楚:

<?php
// 定义你的两个数组
$arr1 = [1, 1, 7, 2];
$arr2 = [1, 13, 2, 1];

// 第一步:先验证数组长度是否相同
// 因为我们是给元素加数字,不是新增元素,长度不同肯定没法匹配
if (count($arr1) !== count($arr2)) {
    echo "错误:数组长度不同,无法通过添加单个正整数使两数组相等";
    exit;
}

// 第二步:排序数组,让相同元素对齐,方便快速定位差异
$sortedArr1 = $arr1;
$sortedArr2 = $arr2;
sort($sortedArr1);
sort($sortedArr2);

$diffElements = [];
$diffIndex = -1;

// 第三步:遍历排序后的数组,找到第一对不同的元素
foreach ($sortedArr1 as $index => $value) {
    if ($value !== $sortedArr2[$index]) {
        $diffElements = [$value, $sortedArr2[$index]];
        $diffIndex = $index;
        break;
    }
}

// 处理数组已经相等的情况
if (empty($diffElements)) {
    echo "两数组已经完全相等,无需添加数字";
    exit;
}

// 第四步:验证是否只有一对差异元素(符合你的前提条件)
// 检查剩下的所有元素是否都相同
for ($i = $diffIndex + 1; $i < count($sortedArr1); $i++) {
    if ($sortedArr1[$i] !== $sortedArr2[$i]) {
        echo "错误:差异元素数量超过1,不符合场景要求";
        exit;
    }
}

// 第五步:计算最小正整数,确定要添加的数组
$numFromArr1 = $diffElements[0];
$numFromArr2 = $diffElements[1];
$difference = $numFromArr2 - $numFromArr1;

if ($difference > 0) {
    // 差值为正,说明arr1的元素更小,加这个数到arr1
    echo "{$difference} 1";
} else {
    // 差值为负,取绝对值,加到arr2的对应元素上
    $minPositiveNum = abs($difference);
    echo "{$minPositiveNum} 2";
}
?>

关键细节说明

  1. 为什么要排序?
    直接用array_diff可能会有坑!比如如果数组是arr1=[1,1,2]和arr2=[1,2,2],array_diff($arr1, $arr2)会返回[1],看起来符合sizeof==1的条件,但实际上有两对元素数量不同,没法通过加一个数让数组相等。排序后对齐元素,能准确判断是否只有单个元素值不同,其他元素完全一致。

  2. 前提条件的严谨性
    你提到的sizeof(array_diff($arr1, $arr2)) == 1只能作为初步判断,结合排序后检查剩余元素是否全相同,才能确保符合你的场景要求。

  3. 最小正整数的逻辑
    计算两个差异元素的差值,如果是正数,直接加到arr1即可;如果是负数,取绝对值加到arr2,这样得到的就是最小的正整数(因为只有一对差异,差值的绝对值就是唯一的正整数选择)。

运行这段代码,针对你的例子会输出6 1,完全符合期望!

内容的提问来源于stack exchange,提问作者Gousia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:50:35