1769. Nombre minimum d'opérations pour déplacer toutes les balles vers chaque boîte
Difficulté :Moyen
Sujets : Tableau, chaîne, somme de préfixe
Vous avez n cases. Vous recevez une chaîne binaire boxes de longueur n, où boxes[i] vaut '0' si la iième case est vide, et '1' si elle contient une balle.
En une seule opération, vous pouvez déplacer une balle d'une case vers une case adjacente. La case i est adjacente à la case j si abs(i - j) == 1. Notez qu'après cela, il peut y avoir plus d'une balle dans certaines cases.
Renvoyer une réponse de tableau de taille n, où réponse[i] est le nombre minimum d'opérations nécessaires pour déplacer toutes les boules vers la iième case.
Chaque réponse[i] est calculée en considérant l'état initial des cases.
Exemple 1 :
Exemple 2 :
Contraintes :
Indice :
Solution :
Nous pouvons utiliser une approche somme de préfixe qui nous permet de calculer le nombre minimum d'opérations nécessaires pour déplacer toutes les balles vers chaque boîte sans simuler explicitement chaque opération.
Implémentons cette solution en PHP : 1769. Nombre minimum d'opérations pour déplacer toutes les balles vers chaque boîte
<?php /** * @param String $boxes * @return Integer[] */ function minOperations($boxes) { ... ... ... /** * go to ./solution.php */ } // Example usage: $boxes = "110"; print_r(minOperations($boxes)); // Output: [1,1,3] $boxes = "001011"; print_r(minOperations($boxes)); // Output: [11,8,5,4,3,4] ?> <h3> Explication: </h3> <ol> <li> <strong>Passe de gauche à droite</strong> : On calcule le nombre total d'opérations nécessaires pour amener toutes les balles du côté gauche vers la surface actuelle. Pour chaque balle trouvée (« 1 »), nous mettons à jour le nombre total de coups.</li> <li> <strong>Passe de droite à gauche</strong> : Semblable à la passe de gauche à droite, mais on calcule le nombre d'opérations pour déplacer les balles du côté droit vers la case actuelle.</li> <li>Le nombre total d'opérations pour chaque case est la somme des mouvements des passes gauche et droite.</li> </ol> <h3> Exemple de procédure pas à pas : </h3> <h4> Exemple 1 : </h4> <pre class="brush:php;toolbar:false">$boxes = "110"; print_r(minOperations($boxes));
Sortie :
Array ( [0] => 1 [1] => 1 [2] => 3 )
$boxes = "001011"; print_r(minOperations($boxes));
Sortie :
Array ( [0] => 11 [1] => 8 [2] => 5 [3] => 4 [4] => 3 [5] => 4 )
Cette solution calcule efficacement le nombre minimum d'opérations pour chaque boîte en utilisant la technique de la somme des préfixes.
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!