美文网首页
数据并集,交集,差集运算

数据并集,交集,差集运算

作者: CaptainRoy | 来源:发表于2018-07-22 16:56 被阅读5次
  • 两个有序整型数组交集
function getIntersection($aArr,$bArr)
{
    asort($aArr);
    asort($bArr);

    $result = [];

    $aIndex = 0;
    $bIndex = 0;

    $aCount = count($aArr);
    $bCount = count($bArr);

    while ($aIndex < $aCount && $bIndex < $bCount) {
        if ($aArr[$aIndex] < $bArr[$bIndex]) {
            $aIndex++;
        } elseif ($bArr[$bIndex] < $aArr[$aIndex]) {
            $bIndex++;
        } else {
            $result[] = $aArr[$aIndex];
            $aIndex++;
            $bIndex++;
        }
    }
    return $result;
}
  • 两个有序数组并集
function getUnionArray($a, $b)
{

    $unionArray = [];

    $aIndex = 0;
    $bIndex = 0;

    $aCount = count($a);
    $bCount = count($b);

    while ($aIndex < $aCount && $bIndex < $bCount) {
        if ($a[$aIndex] < $b[$bIndex]) {
            $unionArray[] = $a[$aIndex];
            $aIndex++;
        } elseif ($a[$aIndex] > $b[$bIndex]) {
            $unionArray[] = $b[$bIndex];
            $bIndex++;
        } else {
            $unionArray[] = $a[$aIndex];
            $aIndex++;
            $bIndex++;
        }
    }

    if ($aIndex < $aCount) {
        for ($i = $aIndex; $i < $aCount; $i++) {
            $unionArray[] = $a[$i];
        }
    }

    if ($bIndex < $bCount) {
        for ($i = $bIndex; $i < $bCount; $i++) {
            $unionArray[] = $b[$i];
        }
    }

    return $unionArray;
}
  • 两个有序数组的差集
function getDifferenceArray($a, $b)
{

    $result = [];

    $aIndex = 0;
    $bIndex = 0;

    $aCount = count($a);
    $bCount = count($b);

    while ($aIndex < $aCount && $bIndex < $bCount) {
        if ($a[$aIndex] < $b[$bIndex]) {
            $result[] = $a[$aIndex];
            $aIndex++;
        } elseif ($a[$aIndex] > $b[$bIndex]) {
            $result[] = $b[$bIndex];
            $bIndex++;
        } else {
            $aIndex++;
            $bIndex++;
        }
    }

    if ($aIndex < $aCount) {
        for ($i = $aIndex; $i < $aCount; $i++) {
            $result[] = $a[$i];
        }
    }

    if ($bIndex < $bCount) {
        for ($i = $bIndex; $i < $bCount; $i++) {
            $result[] = $b[$i];
        }
    }

    return $result;
}

相关文章

网友评论

      本文标题:数据并集,交集,差集运算

      本文链接:https://www.haomeiwen.com/subject/xzalmftx.html