Digamos que tengo una matriz como esa:

[12,3,4,5,8,9,11,20] 

Y un número dado 7, entonces el predecesor / sucesor de la matriz sería 5/8 ¿Cómo encuentro estos números de manera efectiva?

Por el momento, tengo la solución solo para encontrar al sucesor a través de la comparación.

php
0
jmcclane 24 jun. 2020 a las 14:51

2 respuestas

La mejor respuesta

Su necesidad de iterar sobre la matriz y comparar cada número, que guardar el número, si está más cerca de su aguja, que el anterior:

function precessorAndSuccessor(array $numbers, int $needle){
    $pre = NULL;
    $suc = NULL;
    foreach($numbers as $number){
        if($number < $needle){
            if($pre === NULL || $pre < $number){
                $pre = $number;
            }
        }elseif($number > $needle){
            if($suc === NULL || $suc > $number){
                $suc = $number;
            }
        }
    }
    return [
        "predecessor" => $pre,
        "successsor" => $suc
    ];
}
``
1
Sebastian 24 jun. 2020 a las 12:10

Si ordena la matriz, simplemente ejecute y verifique:

$num = 7;
$pre = $suc = false;
sort($array);

foreach($array as $v) {
    if($v < $num) { $pre = $v; }
    if($v > $num) { $suc = $v; break; }
}
0
AbraCadaver 24 jun. 2020 a las 12:25