• 141. 环形链表


    141. 环形链表

    题意

    判断链表中是否有环;

    提升:

    空间复杂度为O(1)

    解题思路

    • 标记链表结点是否已经访问过(通过Python的属性很容易实现);

    • 使用集合记录下访问过的结点的id;

    • 慢结点每次走一步,快结点每次走两步,如果存在环的话两者肯定会相逢(考点!!);

    考察的就是第三种方法,其余的方法都是相对投机取巧的方式来实现的;

    实现

    class Solution(object):
       def hasCycle(self, head):
           """
          执行用时 : 76 ms, 在Linked List Cycle的Python提交中击败了9.34% 的用户
    内存消耗 : 18.2 MB, 在Linked List Cycle的Python提交中击败了9.07% 的用户
          :type head: ListNode
          :rtype: bool
          """
           tmp = head
           while tmp:
               if getattr(tmp, "is_visited", False):
                   return True
               tmp.is_visited = True
               tmp = tmp.next
           return False
         
       def hasCycle(self, head):
           """
          执行用时 : 64 ms, 在Linked List Cycle的Python提交中击败了14.15% 的用户
    内存消耗 : 18.7 MB, 在Linked List Cycle的Python提交中击败了5.29% 的用户
          :type head: ListNode
          :rtype: bool
          """
           tmp = head
           visited_set = set()
           while tmp:
               tmp_id = id(tmp)
               if tmp_id in visited_set:
                   return True

               visited_set.add(id(tmp))
               tmp = tmp.next
           return False
         
       def hasCycle(self, head):
           """
          执行用时 : 64 ms, 在Linked List Cycle的Python提交中击败了14.15% 的用户
    内存消耗 : 18.1 MB, 在Linked List Cycle的Python提交中击败了9.32% 的用户
          :type head: ListNode
          :rtype: bool
          """
           if not head or not head.next:
               return False

           tmp = head
           next_tmp = head.next
           while next_tmp and next_tmp.next:
               if tmp == next_tmp:
                   return True
               tmp = tmp.next
               next_tmp = next_tmp.next.next
           return False

  • 相关阅读:
    ANDROID笔记:shape的简单使用
    ANDROID笔记:根据长宽实现图片压缩
    ANDROID笔记:PopupMenu的用法
    ANDROID笔记:AdapterContextMenuInfo在ListView中的用法
    ANDROID笔记:利用XML布局文件生成Menu
    ANDROID笔记:ContextMenu的用法
    ANDROID笔记:JSON和Adapter的使用
    ANDROID笔记:Dialog的几种用法
    ANDROID笔记:AdapterViewFlipper和ViewFlipper的简单使用
    #2020征文-开发板# 用鸿蒙开发AI应用(一)硬件篇
  • 原文地址:https://www.cnblogs.com/George1994/p/10591759.html
Copyright © 2020-2023  润新知