0
votes

PHP: AdjacentElementsProduct - CodeFights https://app.codesignal.com/arcade/intro/level-2/

QUESTION:

Étant donné un tableau d'entiers, recherchez la paire d'éléments adjacents qui a le plus grand produit et renvoyez ce produit.

Exemple:

https://app.codesignal.com/arcade/intro/level-2

Pour inputArray = [3, 6, -2, -5, 7, 3], la sortie doit être adjacentElementsProduct (inputArray) = 21.

7 et 3 produisent le plus gros produit.

Entrée sortie

Entrée: inputArray: [3, 6, -2, -5, 7, 3]

Résultats attendus: 21

SOLUTION: Mon code qui ne fonctionne pas:

function adjacentElementsProduct($inputArray) {
    $total = 0;
    $temp = 0;
    $maxProduct = 0;
    $var = 0;

    if ($inputArray.count == 1) return 0;

    for ($i = 0; $i < $inputArray[$inputArray.count-1]; $i++) {
        if ($inputArray[i] + $inputArray[i+1] > $maxProduct) {
            $maxProduct = $inputArray[i] * $inputArray[i+1];    
        }
    }

    return $maxProduct;
}

php

2 commentaires

Ce lien ne fonctionne pas, et ces extraits sont pour HTML / CSS / JS uniquement


Etes-vous sûr de vouloir poser une question en PHP? cet extrait de code n'est pas valide en PHP


4 Réponses :


1
votes

Voici comment je le ferais

$inputArray =  [3, 6, -2, -5, 7, 3];

function adjacentElementsProduct($inputArray) {
   $max = 0;
   for($i = 0; $i < (sizeof($inputArray) - 1); $i++){
       $b = $i+1;
       if($inputArray[$i] > 0 && $inputArray[$b] > 0){
           $max = (($inputArray[$i] * $inputArray[$b]) > $max) ? ($inputArray[$i] * $inputArray[$b]) : $max;
       }
   }

   return $max;
}

echo adjacentElementsProduct($inputArray); // Outputs 21


1 commentaires

Correct sauf qu'il peut s'agir de nombres négatifs, donc> 0 n'est pas nécessaire.



2
votes

Comme pour toute tâche de programmation, l'astuce consiste à s'y attaquer pièce par pièce. Vous avez tendance à trouver que votre code est plus lisible lorsque vous décomposez les problèmes en petits composants.

Tu dois:

  • Trouver le produit des éléments adjacents dans un tableau
  • Trouvez le plus grand produit dans ce groupe de valeurs

Vous pouvez aborder cela sans un grand nombre de variables, d'imbrication, etc.

function adjacentElementsProduct(array $inputs) {
    $products = [];

    for ($i = 1; $i < count($inputs); $i++) {
        $products[] = $inputs[$i - 1] * $inputs[$i];
    }

    return max($products);
}

Tout ce que nous faisons, c'est boucler le tableau d'entrée, en commençant par le deuxième élément. Calcul du produit de l'élément précédent et de l'élément courant puis mise du résultat dans un tableau de produits. Enfin, nous exécutons cela via max() qui va gérer la recherche de la plus grande valeur pour nous.

Important à noter: aucune validation n'a lieu ici. Pouvez-vous être sûr que votre tableau ne contiendra jamais que des valeurs numériques? Contiendra-t-il toujours au moins deux éléments? Sinon, vous voudrez en rendre compte.


0 commentaires

-1
votes
function adjacentElementsProduct($inputArray) {
    $res = [];
    
    for($j=0;$j<count($inputArray);$j++){
        $res[] = $inputArray[$j]*$inputArray[$j+1];
    }
    return (max($res) < 0) ? 0 : max($res);
}

1 commentaires

Salut Rahul. Bienvenue dans Stack Overflow. Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme. Comment répondre . Sincères amitiés.



-1
votes

Comme pour toute tâche de programmation, l'astuce consiste à s'y attaquer pièce par pièce. Vous avez tendance à trouver que votre code est plus lisible lorsque vous décomposez les problèmes en petits composants.

Tu dois:

Rechercher le produit des éléments adjacents dans un tableau Rechercher le plus grand produit de ce groupe de valeurs
En PHP, c'est comme ci-dessous:

function adjacentElementsProduct($inputArray) {
        $res = [];
        
        for($j=1;$j<count($inputArray);$j++){
            $res[] = $inputArray[$j-1]*$inputArray[$j];
        }
        return max($res);
    }
    
    $a = [3, 6, -2, -5, 7, 3]
    echo adjacentElementsProduct($a); //21


1 commentaires

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.