. Simulation de robot marcheur
874. Simulation de robot marchant
Difficulté :Moyen
Sujets : Tableau, table de hachage, simulation
Un robot sur un plan XY infini commence au point (0, 0) face au nord. Le robot peut recevoir une séquence de ces trois types de commandes possibles :
- -2 : Tourner à gauche à 90 degrés.
- -1 : Tourner à droite à 90 degrés.
- 1 <= k <= 9 : Avancez de k unités, une unité à la fois.
Certaines cases de la grille sont des obstacles. Le ième obstacle est au point de grille obstacles[i] = (xi, yi). Si le robot rencontre un obstacle, il restera à son emplacement actuel et passera à la commande suivante.
Renvoyer _la distance euclidienne maximale que le robot obtient jamais depuis l'origine au carré (c'est-à-dire si la distance est de 5, renvoyer 25).
Remarque :
- Le Nord signifie la direction +Y.
- Est signifie direction +X.
- Sud signifie direction -Y.
- Ouest signifie direction -X.
- Il peut y avoir un obstacle dans [0,0].
Exemple 1 :
- Entrée : commandes = [4,-1,3], obstacles = []
- Sortie : 25
-
Explication : Le robot démarre à (0, 0) :
- Déplacez-vous vers le nord de 4 unités jusqu'à (0, 4).
- Tournez à droite.
- Déplacez-vous vers l'est de 3 unités jusqu'à (3, 4).
- Le point le plus éloigné que le robot ait jamais atteint de l'origine est (3, 4), dont le carré est de 32 + 42 = 25 unités.
Exemple 2 :
- Entrée : commandes = [4,-1,4,-2,4], obstacles = [[2,4]]
- Sortie : 65
-
Explication : Le robot démarre à (0, 0) :
- Déplacez-vous vers le nord de 4 unités jusqu'à (0, 4).
- Tournez à droite.
- Déplacez-vous vers l'est d'1 unité et soyez bloqué par l'obstacle en (2, 4), le robot est en (1, 4).
- Tournez à gauche.
- Déplacez-vous vers le nord de 4 unités jusqu'à (1, 8).
- Le point le plus éloigné que le robot ait jamais atteint de l'origine est (1, 8), dont le carré est 12 + 82 = 65 unités.
Exemple 3 :
- Entrée : commandes = [6,-1,-1,6], obstacles = []
- Sortie : 36
- Explication : Le robot démarre à (0, 0) :
- Déplacez-vous vers le nord de 6 unités jusqu'à (0, 6).
- Tournez à droite.
- Tournez à droite.
- Déplacez-vous vers le sud de 6 unités jusqu'à (0, 0).
- Le point le plus éloigné que le robot ait jamais atteint de l'origine est (0, 6), ce qui au carré est à 62 = 36 unités.
Contraintes :
- 1 <= commands.length <= 104
- commands[i] est soit -2, -1, soit un entier compris dans la plage [1, 9].
- 0 <= obstacles.length <= 104
- -3 * 104 <= xi, yi <= 3 * 104
- La réponse est garantie inférieure à 231
Solution :
Nous devons simuler le mouvement du robot sur une grille 2D infinie basée sur une séquence de commandes et éviter les éventuels obstacles. Le but est de déterminer la distance euclidienne maximale au carré que le robot atteint depuis l'origine.
Approche
-
Gestion des directions :
- Le robot peut faire face à l'une des quatre directions suivantes : Nord, Est, Sud et Ouest.
- Nous pouvons représenter ces directions sous forme de vecteurs :
- Nord : (0, 1)
- Est : (1, 0)
- Sud : (0, -1)
- Ouest : (-1, 0)
-
Tournage :
- Un virage à gauche (-2) décalera la direction de 90 degrés dans le sens inverse des aiguilles d'une montre.
- Un virage à droite (-1) décalera la direction dans le sens des aiguilles d'une montre de 90 degrés.
-
Mouvement :
- Pour chaque commande de déplacement, le robot se déplacera dans sa direction actuelle, une unité à la fois. S'il rencontre un obstacle, il s'arrête de bouger pour cette commande.
-
Suivi des obstacles :
- Convertissez la liste des obstacles en un ensemble de tuples pour une recherche rapide, permettant au robot de déterminer rapidement s'il heurtera un obstacle.
-
Calcul de la distance :
- Suivez la distance maximale au carré de l'origine que le robot atteint lors de ses mouvements.
Implémentons cette solution en PHP : 874. Simulation de robot marchant
Explication:
- Gestion des directions : Nous utilisons une liste de vecteurs pour représenter les directions, permettant un calcul facile de la position suivante après le déplacement.
- Détection d'obstacles : En stockant les obstacles dans un ensemble, nous obtenons une complexité temporelle O(1) pour vérifier si une position est bloquée par un obstacle.
- Calcul de la distance : Nous mettons continuellement à jour la distance carrée maximale atteinte par le robot lorsqu'il se déplace.
Cas de test
- Les exemples de cas de tests fournis permettent de valider la solution :
- [4,-1,3] sans obstacles devrait renvoyer 25.
- [4,-1,4,-2,4] avec des obstacles [[2,4]] devrait renvoyer 65.
- [6,-1,-1,6] sans obstacles devrait renvoyer 36.
Cette solution gère efficacement les contraintes du problème et calcule la distance maximale au carré selon les besoins.
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.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

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)

Phparrayshandledatacollectionsefficantyusing indexedorassociativstructures; theyareCreated withArray () ou [], accessedViakeys, modifiedByAssigment, itérated withoreach, andmanipulatedUsingFunction

TheObserverdesignpatternenablesautomaticnotificationofdependentobjectswhenasubject'sstatechanges.1)Itdefinesaone-to-manydependencybetweenobjects;2)Thesubjectmaintainsalistofobserversandnotifiesthemviaacommoninterface;3)Observersimplementanupdatemetho

$ _CookieisaphpsuperglobalForAccessingCooKiessentByThebrowser; cookiesAreSetingSetCooKie () BeforeOutput, ReadVia $ _cookie ['name'], Updated Resenderwithnewvalues, anddeletedBysetinganExpiredtimestamp, withsecurit

Utiliser une interfacestodefineContracts pour les classes liées, garantissant à ce que les implications spécifiques de la responsabilité; 2. ustractClassestoshareCommonLogicamongRelatedClasses whileenforcingInheritance; 3.UsetraTstoreUtyUtilityCodeAcrosses

B-TreeIndexesAreBestFormostPhpapplications, AstheySupportequality andRangequeries, Tri, andareIdEalforColumnSuseInwhere, Join, OrorderByClauses; 2.Full-TextIndexessHouldFornaturAralLanguageorBooleanSearSonTextFieldslikeArlesorProductDescriptiiReScriptidScriptidiansearchesEnTextFieldslikeArlesorProductDescripti

Les membres du public sont accessibles à volonté; 2. Les membres privés ne sont accessibles que dans la classe; 3. Les membres protégés sont accessibles dans les classes et les sous-classes; 4. L'utilisation rationnelle peut améliorer la sécurité et la maintenabilité du code.

Utilisation de la méthode orientée objet MySQLI: établissez une connexion, prétraitez les instructions de mise à jour, liez les paramètres, exécutez et vérifiez les résultats, et enfin fermez la ressource. 2. À l'aide de la méthode de procédure MySQLI: Connectez-vous à la base de données via des fonctions, préparez des instructions, liez les paramètres, effectuez des mises à jour et fermez la connexion après le traitement des erreurs. 3. Utilisez PDO: Connectez-vous à la base de données via PDO, définissez le mode Exception, pré-processus SQL, paramètres de liaisons, effectuez des mises à jour, utilisez un coup d'essai pour gérer les exceptions et enfin publier des ressources. Utilisez toujours des instructions de prétraitement pour empêcher l'injection SQL, vérifier l'entrée de l'utilisateur et fermer les connexions dans le temps.

UsedateTimefordatesInPhp: CreateWithNewDateTime (), FormatWithFormat (), ModifyViaAdd () Ormodify (), SettimeZones withDatetimeZone, andCompareusingOratorsOrdiff () tagtIntervals.
