Maison > Article > développement back-end > Nombre minimum d'échanges pour équilibrer la chaîne
1963. Nombre minimum d'échanges pour équilibrer la chaîne
Difficulté :Moyen
Sujets : Deux pointeurs, chaîne, pile, gourmand
Vous recevez une chaîne indexée à 0 s de longueur pair n. La chaîne est composée de exactement n/2 parenthèses ouvrantes '[' et n/2 parenthèses fermantes ']'.
Une chaîne est dite équilibrée si et seulement si :
Vous pouvez échanger les parenthèses à n'importe quel deux indices n'importe quel nombre de fois.
Renvoyer le nombre minimum de swaps pour réaliser des s équilibrés.
Exemple 1 :
Exemple 2 :
Exemple 3 :
Contraintes :
Indice :
Solution :
Nous pouvons utiliser une approche à deux points, qui est efficace compte tenu des contraintes.
Suivi de l'équilibre : au fur et à mesure que nous parcourons la chaîne, nous pouvons suivre l'équilibre entre les parenthèses d'ouverture et de fermeture :
Identifier le déséquilibre : Lorsque le solde devient négatif, cela indique qu'il y a plus de parenthèses fermantes ']' que de parenthèses ouvrantes '[' à ce stade de la chaîne. C'est là que nous devons échanger les crochets pour équilibrer la corde.
Compter les Swaps : Pour corriger un déséquilibre :
Implémentons cette solution en PHP : 1963. Nombre minimum d'échanges pour équilibrer la chaîne
Explication:
Suivi du solde :
- le solde garde une trace de la différence entre le nombre de '[' et ']'.
- Si le solde devient négatif, cela indique qu'il y a plus de ']' que de '[' à ce stade.
Calculer le déséquilibre maximum :
- max_imbalance stocke le plus gros déséquilibre rencontré lors de l'itération.
- Si le solde devient négatif, mettez à jour max_imbalance avec le plus grand de max_imbalance ou -balance.
Calculer les échanges :
- Pour corriger un déséquilibre, le swap minimum requis est de (max_imbalance 1) / 2.
Complexité temporelle :
Cette solution garantit que nous respectons les contraintes, même pour des intrants importants.
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!