2463. Distance totale minimale parcourue
Difficulté?: Difficile
Sujets?:Array, programmation dynamique, tri
Il y a quelques robots et usines sur l'axe X. Vous recevez un robot à tableau entier où robot[i] est la position du ième robot. Vous recevez également une fabrique de tableaux d'entiers 2D où factory[j] = [positionj, limitj] indique que positionj est la position du j èmeusine et que la jèmeusine peut réparer au plus limitej robots.
Les positions de chaque robot sont uniques. Les positions de chaque usine sont également uniques. A noter qu'un robot peut être dans la même position qu'une usine au départ.
Tous les robots sont initialement cassés?; ils continuent d’avancer dans une direction. La direction peut être la direction négative ou positive de l’axe X. Lorsqu'un robot arrive dans une usine qui n'a pas atteint sa limite, l'usine répare le robot et il s'arrête de bouger.
A tout moment, vous pouvez définir la direction initiale de déplacement de certains robots. Votre objectif est de minimiser la distance totale parcourue par tous les robots.
Renvoyer la distance totale minimale parcourue par tous les robots. Les cas de tests sont générés de telle sorte que tous les robots puissent être réparés.
Notez que
- Tous les robots se déplacent à la même vitesse.
- Si deux robots se déplacent dans la même direction, ils n'entreront jamais en collision.
- Si deux robots se déplacent dans des directions opposées et qu'ils se rencontrent à un moment donné, ils n'entrent pas en collision. Ils se croisent.
- Si un robot passe devant une usine qui a atteint ses limites, il la traverse comme si elle n'existait pas.
- Si le robot s'est déplacé d'une position x à une position y, la distance parcourue est |y - x|.
Exemple 1?:
- Entrée?: robot = [0,4,6], usine = [[2,2],[6,2]]
- Sortie?: 4
-
Explication?: Comme le montre la figure?:
- Le premier robot en position 0 se déplace dans le sens positif. Il sera réparé à la première usine.
- Le deuxième robot en position 4 se déplace dans le sens négatif. Il sera réparé à la première usine.
- Le troisième robot en position 6 sera réparé à la deuxième usine. Il n'a pas besoin de bouger.
- La limite de la première usine est de 2, et elle a corrigé 2 robots.
- La limite de la deuxième usine est de 2, et elle a corrigé 1 robot.
- La distance totale est de |2 - 0| |2 - 4| |6 - 6| = 4. On peut montrer que nous ne pouvons pas atteindre une distance totale meilleure que 4.
Exemple 2?:
- Entrée?: robot = [1,-1], usine = [[-2,1],[2,1]]
- Sortie?: 2
-
Explication?: Comme le montre la figure?:
- Le premier robot en position 1 se déplace dans le sens positif. Il sera réparé à la deuxième usine.
- Le deuxième robot en position -1 se déplace dans le sens négatif. Il sera réparé à la première usine.
- La limite de la première usine est de 1, et elle a corrigé 1 robot.
- La limite de la deuxième usine est de 1, et elle a corrigé 1 robot.
- La distance totale est de |2 - 1| |(-2) - (-1)| = 2. On peut montrer que nous ne pouvons pas atteindre une distance totale meilleure que 2.
Contraintes?:
- 1 <= robot.length, factory.length <= 100
- usine[j].length == 2
- -109 <= robot[i], positionj <= 109
- 0 <= limitej <= robot.length
- L'entrée sera générée de telle sorte qu'il soit toujours possible de réparer chaque robot.
Indice?:
- Trier les robots et les usines selon leur position.
- Après le tri, notez que chaque usine doit réparer certains sous-segments de robots.
- Trouvez la distance totale minimale pour réparer les premiers i robots avec les premières j usines.
Solution?:
Nous pouvons utiliser la programmation dynamique avec des tableaux de robots et d'usine triés. L’idée est de minimiser la distance que doit parcourir chaque robot pour être réparé par une usine, en respectant la capacité de réparation de chaque usine. Voici un aper?u étape par étape de l’approche?:
Trier les tableaux du robot et de l'usine par position. Le tri aide à minimiser la distance de déplacement car nous pouvons affecter des robots à proximité aux usines à proximité.
-
Approche de programmation dynamique?: Nous définissons une table DP 2D dp[i][j] où?:
- je représente les premiers robots i.
- j représente les j premières usines.
- dp[i][j] stocke la distance totale minimale pour réparer ces i robots à l'aide de ces j usines.
-
Transition d'état?:
- Pour chaque usine, essayez de réparer un sous-ensemble de robots consécutifs dans sa limite.
- Pour une usine j à la position p, calculez la distance minimale requise pour lui affecter k robots en additionnant les distances de chaque robot à la position de l'usine.
- Mettez à jour l'état du DP en sélectionnant le minimum entre réparer moins de robots ou utiliser au maximum la capacité de l'usine.
Implémentons cette solution en PHP : 2463. Distance totale minimale parcourue
Explication:
- Tri?: Nous trions les robots et les usines par positions pour nous assurer d'attribuer les robots à proximité aux usines à proximité.
- Initialisation DP?: Initialisez dp[0][0] = 0 car aucun robot réparé par aucune usine ne signifie une distance nulle.
-
Transition de programmation dynamique?:
- Pour chaque usine j, nous essayons de réparer les k robots qui la précèdent dans sa limite.
- La distance totale est accumulée dans sumDist.
- Nous mettons à jour dp[i][j] avec la valeur minimale après avoir réparé k robots, en tenant compte de la distance et des états précédents.
Complexité
- Complexité temporelle?: O(n * m * L) où n est le nombre de robots, m est le nombre d'usines et L est la limite maximale de réparations qu'une usine peut gérer.
- Complexité spatiale?: O(n * m) pour la table DP.
Cette solution calcule efficacement la distance de déplacement minimale pour tous les robots à réparer dans les limites de leur usine.
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?:
- GitHub
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les problèmes et les solutions courants pour la portée de la variable PHP incluent: 1. La variable globale ne peut pas être accessible dans la fonction, et elle doit être transmise en utilisant le mot-clé ou le paramètre global; 2. La variable statique est déclarée avec statique, et elle n'est initialisée qu'une seule fois et la valeur est maintenue entre plusieurs appels; 3. Des variables hyperglobales telles que $ _get et $ _post peuvent être utilisées directement dans n'importe quelle portée, mais vous devez faire attention au filtrage s?r; 4. Les fonctions anonymes doivent introduire des variables de portée parents via le mot clé Utiliser, et lorsque vous modifiez les variables externes, vous devez passer une référence. La ma?trise de ces règles peut aider à éviter les erreurs et à améliorer la stabilité du code.

Pour gérer en toute sécurité les téléchargements de fichiers PHP, vous devez vérifier la source et taper, contr?ler le nom et le chemin du fichier, définir les restrictions du serveur et traiter les fichiers multimédias deux fois. 1. Vérifiez la source de téléchargement pour empêcher le CSRF via le jeton et détecter le type de mime réel via FINFO_FILE en utilisant le contr?le de liste blanche; 2. Renommez le fichier à une cha?ne aléatoire et déterminez l'extension pour la stocker dans un répertoire non Web en fonction du type de détection; 3. La configuration PHP limite la taille de téléchargement et le répertoire temporaire Nginx / Apache interdit l'accès au répertoire de téléchargement; 4. La bibliothèque GD résait les images pour effacer des données malveillantes potentielles.

Il existe trois méthodes courantes pour le code de commentaire PHP: 1. Utiliser // ou # pour bloquer une ligne de code, et il est recommandé d'utiliser //; 2. Utiliser /.../ pour envelopper des blocs de code avec plusieurs lignes, qui ne peuvent pas être imbriquées mais peuvent être croisées; 3. Compétences combinées Commentaires tels que l'utilisation / if () {} / pour contr?ler les blocs logiques, ou pour améliorer l'efficacité avec les touches de raccourci de l'éditeur, vous devez prêter attention aux symboles de fermeture et éviter les nidification lorsque vous les utilisez.

AgeneratorInphpisamemory-EfficientwaytoterateOrgedatasetsByyieldingValuesonEatatimeIntedofreturningThemallAtonce.1.GeneratorsUsEtheieldKeywordToproduceValuesondemand, ReducingMemoryUsage.2.TheyAreusefulForHandlingBigloops, ReadingLargeFiles, OR OR.

La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plut?t que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de taches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les co?ts de communication et améliorer l'efficacité de la maintenance du code.

En PHP, vous pouvez utiliser des crochets ou des accolades bouclées pour obtenir des caractères d'index spécifiques à la cha?ne, mais les crochets sont recommandés; L'index commence à partir de 0 et l'accès à l'extérieur de la plage renvoie une valeur nulle et ne peut pas se voir attribuer une valeur; MB_substr est nécessaire pour gérer les caractères multi-octets. Par exemple: $ str = "Hello"; echo $ str [0]; sortie h; et les caractères chinois tels que MB_substr ($ str, 1,1) doivent obtenir le résultat correct; Dans les applications réelles, la longueur de la cha?ne doit être vérifiée avant le boucle, les cha?nes dynamiques doivent être vérifiées pour la validité et les projets multilingues recommandent d'utiliser des fonctions de sécurité multi-octets uniformément.

Toinstallphpquickly, usexAmpPonWindowsorHomebrewonMacos.1.onwindows, downloadAndInstallxAmppp, selectComponents, startapache et placefilesInhtdocs.2.

Toléarnphpeffective, startBySettingUpAlocalServerERironmentUsingToolsLILYXAMPPANDACODEDITERLIGHILLEVSCODE.1) INSTRUSITIONXAMPFORAPACHE, MYSQL, ANDPHP.2) USACODEDEDITORFORSYNTAXSUPPORT.3)
