Leetcode--141. 环形链表

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

 

示例 1:

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


示例 2:

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


示例 3:

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

进阶:

你能用 O(1)(即,常量)内存解决此问题吗?

思路:快慢指针法

两个指针从头开始遍历,快指针每次走两步,慢指针每次走两步

设慢指针走了n步,快指针就走了2n,每次的差距为n步,所以如果有环,快慢指针总会相遇

我们将慢指针的移动过程划分为两个阶段:非环部分与环形部分:

1. 慢指针在走完非环部分阶段后将进入环形部分:此时,快指针已经进入环中,非环部分长度=N

2. 两个指针都在环形区域中:考虑两个在环形赛道上的运动员 - 快跑者每次移动两步而慢跑者每次只移动一步。其速度的差值为 1
​    因此,在最糟糕的情形下,时间复杂度为 O(N+K),也就是 O(n)。

刚开始还考虑过会不会快的每次两步,如何跳过慢指针,后来仔细一想,发现不是这样的,因为慢指针也在移动

通俗点可以理解为他们的相对速度只差一个格子,快的只能一个一个格子的去追慢的,必然在一个格子相遇。

如果没看懂,看下面的详细。
一次跳2个与一次跳一个格子的追上之后,是一定会在一个格子遇到的。因为在即将追上的时候,快的那个落后慢的1个或者2个格子,无论哪种,落后1个的话,下一步正好追上,落后2个格子的话,下一步就落后1个格子了,也可以说即将追上的时候一定是相差1个格子,下一步一定在一个格子相遇。

提交的代码:

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head==null||head.next==null)
        {
            return false;
        }
        ListNode slow,fast;
        slow = head;
        fast = head.next;
        while(slow!=fast)
        {
            if(fast.next==null||fast.next.next==null)
            {
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MapReduce 踩坑 - hadoop No FileSystem for scheme: file/hdfs

一、场景 hadoop-3.0.2 hbase-2.0.0 一个mapreduce任务,在IDEA下本地提交到hadoop集群可以正常运行。 现在需要将IDEA本地项目通过maven打成jar包,从而能够在windows/Linux命令行下,通过Java -jar方式运行。 二、状况 报错可能1:…

解读自动驾驶的2020:从硬件角度看,无人车商业化落地难在哪?

来源 :AI前线作者 :滴滴自动驾驶技术团队策划 :陈思「重点问题」什么是合适的无人驾驶车辆平台?复杂场景下的“无人驾驶”,传感器硬件系统还有哪些挑战?告别 demo 硬件系统后,下一个前装量产的必…

Leetcode--142. 环形链表Ⅱ

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有…

java中字符串函数_JAVA中字符串函数subString的用法小结

string str;str=str.substring(int beginindex);截取掉str从首字母起长度为beginindex的字符串,将剩余字符串赋值给str;str=str.substring(int beginindex,int endindex);截取str中从beginindex开始至endindex结束时的…

select默认下拉箭头改变、option样式清除

谷歌、火狐、ie下 select 的默认下拉箭头图标差别还是比较大,一般我们都会清除默认样式,重新设计箭头图标; /* --ie清除--*/select::-ms-expand{ display: none; }/* --火狐、谷歌清除--*/select{appearance:none; -moz-appearance:none; -…

Leetcode--15. 三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums [-1, 0, 1,…

他们提出了一个大胆的猜想:GWT(深度学习)→通用人工智能

来源:AI科技评论编译 :陈彩娴近日,有一篇发表在arXiv的论文“Deep Learning and the Global Workspace Theory”提出了一个大胆的猜想(或理论)。两位作者认为,当下的深度学习已经可以基于一个意识模型&…

python调用jar 性能_亲自有效---python 调用jar

#-*-coding:utf-8-*-import jpypefrom jpype import *import os.pathjarpath os.path.abspath(‘.‘)#这个函数用来获取当前 python 脚本所在的绝对路径aajarpath ‘\JpypeDemo.jar‘print(aa)jvm_path jpype.getDefaultJVMPath() #获取当前系统JDK的路径print(jvm_path)# s…

计算机网络-奈氏准则

假定某信道受奈氏准则限制的最高码元速率为20000码元/秒。如果采用振幅调制,把码元的振幅划分为16个不同等级来传送,那么可以获得多高的数据率(b/s)?答:CR*Log2(16)20000b/s*480000b/s (C是速据…

Leetcode--80. 删除排序数组中的重复项Ⅱ

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums [1,1,1,2…

科学史上那些盛极一时的“著名理论”是如何被攻破的?

《雅典学院》名画中的亚里士多德和柏拉图来源 :《自然》百年科学经典制版编辑: Morgan在科学发展的过程中,曾经涌现出不少盛极一时而后被证明是错误的理论。这些理论有的也许在今天看来悖谬荒诞,但是从整个科学发展的过程来看,它们仍然有其作…

Cluster - LB - haproxy

sd 转载于:https://www.cnblogs.com/aftree/p/9219435.html

Leetcode--1004. 最大连续1的个数Ⅲ

给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。 返回仅包含 1 的最长(连续)子数组的长度。 示例 1: 输入:A [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释: [1,1,1…

java 按钮 颜色_改变按钮颜色的java事件,个人成果!

import java.awt.*;import java.awt.event.*;public class Eventest{Button btn1new Button("单击");Frame myframenew Frame("测试单击事件");public void init(){btn1.setSize(30,26);btn1.addActionListener(new ActionListener(){public void actionPe…

AI在智能建筑中的应用和发展

来源:中研网图片来源:网络智能建筑诞生于二十世纪末,第一幢智能建筑于1984年在美国哈特福德 (Hartford)市建成。我国于90年代才起步,但迅猛发展势头令世人瞩目。目前,新技术、新产品在智能建筑中…

SpringBoot核心

1.基本配置 1.1入口类和SrpingBootApplication SpringBoot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法 。在main方法中使用SpringApplication.run,启动springboot项目。 其中EnablieAutoC…

grpc简单使用 java_gRPC学习记录(四)-官方Demo - Java 技术驿站-Java 技术驿站

了解proto3后,接下来看官方Demo作为训练,这里建议看一遍之后自己动手搭建出来,一方面巩固之前的知识,一方面是对整个流程更加熟悉.官方Demo地址: https://github.com/grpc/grpc-java例子是一个简单的路由映射的应用,它允许客户端获取路由特性的信息,生成…

冯端:漫谈物理学的过去、现在与未来

来源: 算法与数学之美撰文: 冯端 (南京大学物理系)“物理学的过去、现在和未来”是一个非常大而且重要的题目,也是一个非常难讲的题目,特别是涉及物理学的未来,结果往往是贻笑大方。这里以历史的透视为主线&#xff0c…

Leetcode--713. 乘积小于k的子数组

给定一个正整数数组 nums。 找出该数组内乘积小于 k 的连续的子数组的个数。 示例 1: 输入: nums [10,5,2,6], k 100 输出: 8 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于100的子数…

第四次博客

第四次博客 一、测试与正确性论证的比较 测试具有针对性,能从一些方面完美的展现出代码的正确性,但是它的验证度取决于样例的质量。 优点是方便,快捷,结果明显;缺点是可能不会覆盖到方方面面。 正确性论证能从所有的方…