ARTS Week 13
Jan 20, 2020 ~ Jan 26, 2020
Algorithm
Problem 141 Linked List Cycle (环形链表) 题目链接
题目描述:给定一个链表,判断链表中是否存在环形。pos 代表链表末尾指向的连接到链表的位置,从0开始。若 pos = -1 则表示链表中没有环(注意:输入的只有链表本身,没有 pos)
举例:
Input: head = [3,2,0,-4] (pos = 1)
Output: true
3 -> 2 -> 0 -> -4
\ /
\ <------/
Input: head = [3,2,0,-4] (pos = -1)
Output: false
3 -> 2 -> 0 -> -4 -> None
思路1:因为每个结点的地址是唯一的,在 Python 中,id 函数可以求得某个对象的内存地址。可以将这些对象的内存地址保存在一个集合中。因此遍历链表,若某个结点的地址未在集合中,将其地址加入到集合中,若已在集合中,说明链表存在环形。如果链表遍历结束到 None 仍未发现重复出现的结点,那么可以说明链表中不存在环形。
通过的代码如下
# Solution 1
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
node_id = set([])
res = True
while head != None:
if id(head) not in node_id:
node_id.add(id(head))
else:
break
head = head.next
else:
res = False
return res
思路2:可以设置两个指针,一个逐个遍历链表称为慢指针,一个每次隔一个遍历链表称为快指针,起始时,快指针比慢指针靠前一个位置,如果链表中存在环形,那么就好比操场上跑圈一样,快的终有一刻会和慢的相遇(快的超过慢的一圈)。如不存在环形,那么快指针将优先到达结束的结点
通过的代码如下
# Solution 2
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if head == None:
return False
elif head != None and head.next == None:
return False
else:
slow = head
fast = head.next
res = False
while slow != fast:
if (fast.next == None) or (fast.next.next == None):
break
slow = slow.next
fast = fast.next.next
else:
res = True
return res
Review
本周继续 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:
- 不要触摸该密码(Don't Touch that Code!) 原文链接
我们应该不同用途的机器设置不同的密码,且不同任务的人应该知道不同的代码。比如开发人员本地机器、开发服务器和生产服务器。其中开发服务器的密码重要程度没有生产服务器高,不应该让所有的人都有权限去访问生产服务器。 - 封装行为,而不是状态(Encapsulate Behavior, not Just State) 原文链接
面向对象的一大特点便是封装,封装的一个重要的要求便是对行为/操作进行封装,而不是操作前后的状态。比如一个门对象,它有四个状态:打开,关闭,正在打开,正在关闭。而这四个状态的转换只需要两个操作便可以完成:开门,关门。 - 浮点数不是实数(Floating-point Numbers Aren't Real) 原文链接
在计算机底层,浮点数的实现和整数的实现是不同的。整数在底层是可以准确表达的,而浮点数都是近似的。因此,在一些高精度计算中,可能会由于浮点数近似的问题带来意想不到的后果。这就是为什么 linux 内核和金融程序/科学计算程序中很少使用浮点数,而是去一些十进制类用于代替。 - 用开源实现你的抱负(Fulfill Your Ambitions with Open Source) 原文链接
也许你渴望能加入微软,亚马逊等大企业,但是有一个更好的办法,那就是利用开源,现如今开源项目众多,可以轻松的找到你感兴趣的方向。如果从零开始发起一个开源项目有难度,那么,一个更好的办法便是加入已有的项目,你可以帮忙参与开发,找出bug,或者编写/完善文档。 - API设计的黄金法则(The Golden Rule of API Design) 原文链接
API设计的黄金法则是:仅仅为开发的API编写测试是不够的,要为使用该API的代码编写进行单元测试。
Tips
JavaScript 中 ''和'='的区别:==比较,它会自动转换数据类型再比较,很多时候,会得到非常意想不到的结果;===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较值是否相同。
Sharing
除了正在翻译的程序员应该知道的97件事之外,我还发现另一个比较好的可以翻译的文章,那边是 Linux 中国翻译计划,里面有很多已经选好的文章等待翻译,你可以找到自己感兴趣的文章进行翻译,一些具体的介绍和如何参与的方式,可以在如下链接中找到答案:Linux 中国 翻译组
ARTS Week 13的更多相关文章
- Fastjson 专题
JSONObject.toJSONString(Object object, SerializerFeature... features) SerializerFeature有用的一些枚举值 Quot ...
- 为什么fastjson字段为null时不输出空字符串?
为什么fastjson字段为null时不输出空字符串? Map < String , Object > jsonMap = new HashMap< String , Object& ...
- arts打卡13周
算法: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ...
- 【ARTS】01_19_左耳听风-20190318~20190324
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_08_左耳听风-20181231~20190106
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_44_左耳听风-201900909~201900915
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_22_左耳听风-201900408~2019004014
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- TechEmpower 13轮测试中的ASP.NET Core性能测试
应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此.此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚.在选择框架时, ...
- .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍
Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...
随机推荐
- nginx优势,依赖,启动
Nginx Nginx优势1.nginx将网络,磁盘及定时器等异步事件的驱动都做了非常好的封装,基于它开发将可以忽略这些事件处理的细节.2.Nginx封装了许多平台无关的接口,容器,适用于跨平台开 ...
- 曹工说Spring Boot源码(8)-- Spring解析xml文件,到底从中得到了什么(util命名空间)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- ACM北大暑期课培训第八天
今天学了有流量下界的网络最大流,最小费用最大流,计算几何. 有流量下界的网络最大流 如果流网络中每条边e对应两个数字B(e)和C(e), 分别表示该边上的流量至少要是B(e),最多 C(e),那么,在 ...
- SQL Server2012高可用之事物复制(发布订阅)测试
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既不可写也不可读,即采用的高可用技术为"数据库镜像".存在的问题为 ...
- creator 2.0版本对于preloadScene函数获取加载进度
有时候,当我们场景上挂载的资源过多时,我们使用cc.director.loadScene切换场景时会等一段时间才会切换过去,这对游戏的体验是相当不好的.所以我们可以使用cc.director.prel ...
- TCP 协议详解
TCP 协议是 更靠近应用层,因此在应用程序中具有更强可操作性,一些重要 socket 选项都和 TCP 协议相关. TCP 头部信息:TCP 头部信息出现在每个 TCP 报文段中,用于指定通信的源端 ...
- TensorFlow——MNIST手写数据集
MNIST数据集介绍 MNIST数据集中包含了各种各样的手写数字图片,数据集的官网是:http://yann.lecun.com/exdb/mnist/index.html,我们可以从这里下载数据集. ...
- cogs 3008. 朋友圈
3008. 朋友圈 ★★ 输入文件:friendscircle.in 输出文件:friendscircle.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] NO ...
- MySql数据主从同步配置
由于需要配置MySQL的主从同步配置,现将配置过程记录下,已被以后不时之需 MySql数据主从同步 1.1. 同步介绍 Mysql的 主从同步 是一个异步的复制过程,从一个 Master复制到另一 ...
- 三个实用的javascript小技巧
从后向前获取数组元素 如果你想从后向前获取一个数组的元素,可以这样写: var newArray = [1, 2, 3, 4] console.log(newArray.slice(-1)) // [ ...