2762. Sous-réseaux continus
Difficulté :Moyen
Sujets : Fenêtre coulissante, tableau, ensemble ordonné, tas (file d'attente prioritaire), file d'attente, file d'attente monotone, deux pointeurs, carte ordonnée, table de hachage, programmation dynamique, comptage, mathématiques, arbre de recherche binaire, Arbre de segments, Arbre, Pile, Recherche binaire, Pile monotone, Mémorisation, Itérateur, Gourmand, Recherche en profondeur d'abord, Récursivité
Vous recevez un tableau numérique indexé à 0. Un sous-tableau de nombres est appelé continu si :
Renvoyer le nombre total de sous-tableaux continus.
Un sous-tableau est une séquence contiguë non vide d'éléments au sein d'un tableau.
Exemple 1 :
Exemple 2 :
Contraintes :
Indice :
Solution :
Nous pouvons utiliser la technique de la fenêtre coulissante pour calculer efficacement le nombre de sous-réseaux continus. Nous conserverons une fenêtre valide où la différence entre les valeurs maximales et minimales dans le sous-tableau est d'au plus 2. Pour suivre efficacement les valeurs maximales et minimales dans la fenêtre actuelle, nous pouvons utiliser deux deques (un pour le maximum et un pour le minimum).
Implémentons cette solution en PHP : 2762. Sous-réseaux continus
<?php /** * @param Integer[] $nums * @return Integer */ function continuousSubarrays($nums) { ... ... ... /** * go to ./solution.php */ } // Example usage $nums1 = [5, 4, 2, 4]; echo continuousSubarrays($nums1) . "\n"; // Output: 8 $nums2 = [1, 2, 3]; echo continuousSubarrays($nums2) . "\n"; // Output: 6 ?> <h3> Explication: </h3> <ol> <li><p><strong>Fenêtre coulissante :</strong><br><br> Le pointeur gauche avance uniquement lorsque la fenêtre devient invalide (c'est-à-dire que la différence entre les valeurs maximale et minimale dépasse 2). Le pointeur droit agrandit la fenêtre en parcourant le tableau.</p></li> <li> <p><strong>Deques pour Maximum et Minimum :</strong></p> <ul> <li>Le maxDeque contient toujours les indices des éléments par ordre décroissant, garantissant que la valeur maximale dans la fenêtre actuelle est au premier plan (maxDeque[0]).</li> <li>Le minDeque contient toujours les indices des éléments par ordre croissant, garantissant que la valeur minimale dans la fenêtre actuelle est au premier plan (minDeque[0]).</li> </ul> </li> <li><p><strong>Comptage des sous-tableaux :</strong><br><br> Pour chaque droite, le nombre de sous-tableaux valides se terminant par la droite est égal à (droite - gauche 1), car tous les sous-tableaux de gauche à droite sont valides.</p></li> <li><p><strong>Efficacité :</strong><br><br> Chaque élément est ajouté et supprimé des deques au plus une fois, ce qui rend la complexité temporelle <strong>O(n)</strong>. La complexité spatiale est <strong>O(n)</strong> en raison des deques.</p></li> </ol> <hr> <h3> Sortir </h3> <pre class="brush:php;toolbar:false">8 6
Complexité temporelle :
Complexité spatiale :
Cette mise en œuvre est efficace et fonctionne dans les limites fournies.
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!