<LeetCode天梯>Day029环形链表(哈希表+双指针) | 初级算法 | Python

举报
府学路18号车神 发表于 2022/05/11 16:07:59 2022/05/11
【摘要】 每日推荐一首歌:Hymn For The Weekend [Remix] MV以下为我的天梯积分规则:每日至少一题:一题积分+10分 若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)初始分为100分若差一天没做题,则扣积分-10分(周六、...

每日推荐一首歌:Hymn For The Weekend [Remix] MV

以下为我的天梯积分规则

每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60


初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息
坚持!!!


初级算法

刷题目录

链表

在这里插入图片描述

题干

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

如果链表中存在环,则返回 true 。 否则,返回 false 。

示例1:
请添加图片描述

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例2:
请添加图片描述

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例3:
请添加图片描述

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。


哈希表

分析:

今年,有些累了,先吧框架搭在这里吧!~
更新日志:2021/11/20
我只最终只需要判断内部有没有环,内部有一个pos,当为-1的时候则为没有环,输出false;相反,则输出True。
其中我们可以先将链表的值放在一个list哈希表中,然后判断当前的节点是否存在。

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        hashmap = []
        while head:
            if  head in hashmap:
                return True
            hashmap.append(head)
            head = head.next
        return False

哇,这个时间真的是感人呀!!!
在这里插入图片描述
注意上面用的是list,下面我们用集合来看看会不会快一些!~

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        hashmap = set()
        while head:
            if  head in hashmap:
                return True
            hashmap.add(head)
            head = head.next
        return False

在这里插入图片描述
快了很多,有没有,这就是set()的妙用啊!哈哈哈,下面咱们在用双指针试试~

双指针

分析:

使用一个快指针m和慢指针n,如果最终m和n相等,那么就返回True,否则,返回False。
慢指针针每次走一步,快指针每次走两步,如果相遇就说明有环,如果有一个为空说明没有环。

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
 		# 双指针
        if not head:
            return False
        
        # 设置两个指针快和慢
        fast = head
        slow = head
        while fast != None and fast.next != None:
            slow = slow.next    # 慢走一步
            fast = fast.next.next    # 快走两步
            # 设置判断,如果相遇则说明有环
            if fast == slow:
                return True
            # 否则False
        return False

怎么说呢,不能说效果不好吧,但是便于理解!这就很棒了~

完结撒花❀

链表小节终于结束,一周的时间,加油加油,后面还有(树、排序和搜索、动态规划、设计问题、数学和其他)小节,我们下周

再见吧!

加油,小伙伴们!~

Reference

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnarn7/
来源:力扣(LeetCode)


今日得分:+10+10+20
总得分:630

加油!!!

❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!打天梯!!!
To Be No.1

⚡⚡


创作不易⚡,过路能❤关注收藏点个赞三连就最好不过了

ღ( ´・ᴗ・` )


幸福的家庭都是相似的,不幸的家庭各有各的不幸。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。