3月2日 Linked List Cycle
今天星期天,准备好周一的PPT内容,再回来做题,以后考虑周末做一个APP或者微信帐号玩吧。
回到题目, Linked List Cycle,一个检查单项链表是否有环路的问题。
题目周五的时候就简单做过,可是链表中带入了一个val常量,当时误以为是要检查是否有重复值,WA了。
早上再试了会,缓过来,其实还是比较地址指针。
最开始写的一个简单方法,只能判断是否与头指针重复,但是如果环路从中间开始就判断不到了,再想了10多分钟,有一个O(n^2)的算法,每次从第一个指针开始,判断后面k-1个指针是否相同:
/**
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
if (head == NULL) return false;
if (head->next == NULL) return false;
//if (head->val == head->next->val) return true; ListNode *p = head->next;
int counter = 1; while (p != NULL)
{
//if (p->val == head->val) return true;
ListNode *cpr = head; for (int i = 0; i < counter; ++i)
{
if (cpr == p) return true;
cpr = cpr->next;
} p = p->next;
counter++;
}
return false;
}
};
可惜,TLE超时了,看了下用例,最大长度已经超过5000,5000的平方已经超过2千5百万,确实是超过1秒了。
后续又思考了半个多小时,画满了一张草稿纸也没想好,囧,战斗力下滑啊。
看了Discuss里,一句话就明白了,一个跑得快,一个跑得慢,两个相遇的时候就是环路了。
所以就有了下面的做法,写的比较快,所以加了if多一点:
/**
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
if (head == NULL) return false;
if (head->next == NULL) return false;
if (head->next->next == NULL) return false; ListNode *p = head->next;
ListNode *p2 = head->next->next; while (p != NULL && p2 != NULL)
{
if (p == p2) return true;
if (p2->next == NULL) return false;
if (p2->next->next == NULL) return false;
p = p->next;
p2 = p2->next->next;
}
return false;
}
};
下次遇到类似的问题,考虑从反方向思考。
3月2日 Linked List Cycle的更多相关文章
- 【LeetCode】141. Linked List Cycle 解题报告(Java & Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 保存已经走过的路径 日期 [LeetCode ...
- 【LeetCode】142. Linked List Cycle II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 set 日期 题目地址:https://le ...
- 4月11日 python学习总结 对象与类
1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ...
- 【视频】k8s套娃开发调试dapr应用 - 在6月11日【开源云原生开发者日】上的演示
这篇博客是在2022年6月11日的[开源云原生]大会上的演讲中的演示部分.k8s集群套娃(嵌套)是指在一个k8s的pod中运行另外一个k8s集群,这想法看上去很疯狂,实际上非常实用. k8s集群套娃( ...
- 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS
一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...
- 张小龙宣布微信小程序1月9日发布,并回答了大家最关心的8个问题
2016 年 12 月 28 日,张小龙在微信公开课 PRO 版的会场上,宣布了微信小程序的正式发布时间. 微信小程序将于 2017 年 1 月 9 号正式上线. 同时他解释称,小程序就像PC时代的网 ...
- 中国式商业智能报表ActiveReports免费公开课,10月20日开讲
ActiveReports公开课全方位报表解决方案,满足商业报表五大需求 [开课时间]10月20日[主讲老师]葡萄城报表产品经理[开课形式]网络在线公开课[活动费用]前50名免费 适合人群:报表开发人 ...
- JavaScript图表FusionCharts免费在线公开课,由印度原厂技术工程师主讲,10月13日发车
FusionCharts公开课达人还你做 轻松晋升图表大师 [开课时间]10月13日 14:30[主讲老师]印度原厂技术工程师[开课形式]网络在线公开课[活动费用]前50名免费 现在就可以报名哦 报 ...
- [LeetCode] Linked List Cycle II 单链表中的环之二
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
随机推荐
- 2015 年最棒的 5 个 HTML5 框架
大多数的 web 开发者一直在用关键点来寻找动态的框架,这样能简化他们的设计和开发工作.HTML5 框架在所有的 web 浏览器和手机应用上都展现了优秀的性能.它不仅简化了 HTML5 开发中 CSS ...
- Java日期时间使用总结
一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题. 在J ...
- free 查看系统内存
第二部分(-/+ buffers/cache):(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used – buffers – cached)(+buffers ...
- Java 线程间通讯(共享变量方式)
Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...
- MongoDB 语法使用小结
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的 他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据 ...
- Enterprise Library 5.0 系列教程
1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise L ...
- nyoj 102 次方求摸 快速幂
点击打开链接 次方求模 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100) 每组测 ...
- android小细节
1.资源包图片尽量控制在50k以内,否则可能读取失败 2.资源图片建议使用png格式,此格式在android系统上支持最好.对于jpeg和gif格式的图片,在android4.0以后版本,通过系统自缩 ...
- SSH连接问题
新安装的ubuntu14.04无法使用root用户ssh连接,显示ssh root permission denied 解决方法: /etc/ssh/sshd_confg: PermitRootLog ...
- 【测试】DG的主切备,备切主
1.首先要应用日志,保持主备库一致: 备库:SBDB@SYS> recover managed standby database using current logfile disconnect ...