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

如何高效检测二元数组(含逆序)是否存在于两数组生成的交叉组合数组中?

解决方案:判断二元数组是否存在于交叉组合数组(顺序不限)

核心思路

不用先生成完整的$selections数组再做匹配,直接基于原数组$a和$b的生成规则做校验,既节省内存又更简洁:

  • 当$result两个元素相同时:需满足该元素同时存在于$a和$b(匹配业务中[3,3]算存在的规则)
  • 当$result两个元素不同时:需满足「第一个元素在$a且第二个在$b」或者「第一个元素在$b且第二个在$a」

简洁实现代码

function isResultExists($result, $a, $b) {
    $x = $result[0];
    $y = $result[1];
    
    // 处理两元素相同的场景
    if ($x === $y) {
        return in_array($x, $a) && in_array($x, $b);
    }
    
    // 处理两元素不同的场景,两种顺序都校验
    return (in_array($x, $a) && in_array($y, $b)) || (in_array($x, $b) && in_array($y, $a));
}

验证示例

用题目给出的$a = [1, 2, 3]、$b = [3, 4, 5]测试:

应返回存在(true)的情况

  • isResultExists([1, 3], $a, $b)
  • isResultExists([3, 1], $a, $b)
  • isResultExists([2, 5], $a, $b)
  • isResultExists([3, 3], $a, $b)

应返回不存在(false)的情况

  • isResultExists([1, 2], $a, $b)
  • isResultExists([4, 4], $a, $b)

注:题目中「存在」和「不存在」列表同时出现[3,3],推测是笔误,此处按业务逻辑中「存在」的规则处理。

方案优势

先生成$selections会占用额外内存,尤其是当$a和$b元素较多时,直接基于原数组校验的方式时间复杂度更低,代码也更精简,无需维护额外的组合数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:45:34