LeetCode question 141. Voici un exemple de réponse à Linked List Cycle en Python. https://leetcode.com/problems/linked-list-cycle/
L'énoncé du problème est simple: étant donné une liste chaînée, déterminez si elle contient un cycle., Étant donné une liste chaînée. L'argument est une liste chaînée.
L'algorithme de résolution est simple. Prenons l'exemple 1 de l'énoncé du problème comme exemple. Tout d'abord, le graphique en question (appelé ici un graphique car il ressemble à un graphique en tant que structure de données, et non à un graphique jusqu'aux mathématiques du secondaire).
Considérons maintenant le pointeur lent et le pointeur rapide. Le point de départ ici est le 3 le plus à gauche. Le pointeur lent avance un à la fois et le pointeur rapide avance deux à la fois. Maintenant, si vous continuez une fois ici, cela ressemblera à la figure ci-dessous.
Après avoir procédé deux fois, ce sera comme indiqué dans la figure ci-dessous.
Après avoir procédé 3 fois, ce sera comme indiqué dans la figure ci-dessous.
Après être allés trois fois, le pointeur lent et le pointeur rapide sont arrivés au même endroit (nœud 4).
Voici deux exemples de réponses.
class Solution:
def hasCycle(self, head: ListNode) -> bool:
"""
type head: ListNode
return type: bool
"""
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
return True
return False
Le résultat de l'exécution de l'exemple de réponse 1 est le suivant. Au moment de cette exécution, il semble être 64,54% plus rapide que la soumission moyenne en Python3. De même, l'utilisation de la mémoire semble être 100% inférieure à cela.
class Solution:
def hasCycle(self, head: ListNode) -> bool:
"""
type head: ListNode
return type: bool
"""
try:
slow = head
fast = head.next
while slow != fast:
slow = slow.next
fast = fast.next.next
return True
except:
return False
Le résultat de l'exécution de l'exemple de réponse 2 est le suivant. Au moment de cette exécution, il semble être 33,8% plus rapide que la soumission moyenne en Python3. De même, l'utilisation de la mémoire semble être 100% inférieure à cela. On pense que la raison pour laquelle la vitesse de traitement est plus lente que dans l'exemple de réponse 1 est que try except effectue le traitement de jugement à chaque fois et que l'instruction if est augmentée de un, donc elle est plus lente de ce montant.
Recommended Posts