PHP의 알고리즘 설명 - problema#1.

문제a



Dada uma lista de números e um número k, retorne true caso existam dois números da lista que somados resultam em k.
예를 들어, [10, 15, 3, 7] e k = 17, 또는 10 + 7 é 17이 되야 합니다.

해결



que queremos achar dois números que somados resultam o mesmo valor de k, podemos thinkar que temos uma expressão de soma simples, como abaixo:

k = a + b


Essa expressão, pode ser reescrita como:

a - k = b


존재하지 않는 PHP ao menos três formas de fazer isso, vou listar todas as três:

1 - A primeira ea que thinko menos ideal é usar array_flip e transformar os valores em chaves, possibilitando o uso do isset em um foreach.

$array = array_flip([10, 15, 3, 7]);
$k = 25;
    foreach ($array as $key => $num) {
        if (isset($array[$k - $key])) {
        echo 'true';
        break;
    }
}


2 - foreach com um in_array를 사용하려면 array_flip을 수행해야 합니다.

$array = [10, 15, 3, 7];
$k = 25;
foreach ($array as $key => $num) {
    if (in_array($k - $key, $array)) {
        echo 'true';
    }
}


3 - Ou ainda usar uma função que faz uso de loops para verificar os valores.

/**
 * @param array $array
 * @param int $k
 * @return bool
 */
function twosum(array $array, int $k): bool
{
    foreach ($array as $key => $value) {
        foreach ($array as $key2 => $value2) {
            if ($value + $value2 == $k) {
                return true;
            }
        }
    }

    return false;
}

$array = [10, 15, 3, 7, 2];
$k = 17;
var_dump(twosum($array, $k));

좋은 웹페이지 즐겨찾기