Maison >développement back-end >tutoriel php >Deux meilleurs événements sans chevauchement
2054. Deux meilleurs événements sans chevauchement
Difficulté :Moyen
Sujets : Tableau, recherche binaire, programmation dynamique, tri, tas (file d'attente prioritaire)
Vous recevez un indexé 0 tableau d'événements entiers 2D où events[i] = [startTimei, endTimei, value je]. Le ième événement commence à startTimei et se termine à endTimei, et si vous assistez à cet événement, vous recevrez une valeur de valuei . Vous pouvez choisir au plus deux événements qui ne se chevauchent pas auxquels assister de telle sorte que la somme de leurs valeurs soit maximisée.
Renvoyer cette somme maximale.
Notez que l'heure de début et l'heure de fin sont inclusives : c'est-à-dire que vous ne pouvez pas assister à deux événements dont l'un commence et l'autre se termine en même temps. Plus précisément, si vous assistez à un événement avec une heure de fin t, le prochain événement doit commencer à ou après t 1.
Exemple 1 :
Exemple 2 :
Exemple 3 :
Contraintes :
Indice :
Solution :
Nous pouvons utiliser l'approche suivante :
Trier les événements par heure de fin :
Recherche binaire d'événements qui ne se chevauchent pas :
Programmation dynamique avec suivi maximum :
Itérer et calculer la somme maximale :
Implémentons cette solution en PHP : 2054. Deux meilleurs événements sans chevauchement
Explication:
Tri :
- Les événements sont triés selon leur heure de fin, ce qui permet une recherche efficace du dernier événement qui ne se chevauche pas.
Recherche binaire :
- Pour chaque événement, la recherche binaire détermine le dernier événement qui se termine avant le début de l'événement en cours.
Suivi maximum :
- Nous maintenons un tableau maxUpTo, qui stocke la valeur maximale des événements jusqu'à l'index actuel. Cela évite de recalculer le maximum pour les indices antérieurs.
Calcul de la somme maximale :
- Pour chaque événement, calculez la somme de sa valeur et de la meilleure valeur d'événement sans chevauchement. Mettez à jour la somme maximale globale en conséquence.
Analyse de complexité
Cette solution est efficace et fonctionne bien dans les limites des contraintes.
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!