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更注重与机器 ...
随机推荐
- Session是怎么实现的?存储在哪里?
为什么有session? 首先大家知道,http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你. 那么,在一些场合,确实需要服务器记住当前用户怎么办 ...
- iOS多线程编程原理及实践
摘要:iOS开发中,开发者不仅要做好iOS的内存管理,而且如果你的iOS涉及多线程,那你也必须了解iOS编程中对多线程的限制,iOS主线程的堆栈大小为1M,其它线程均为512KB,且这个限制开发者是无 ...
- C++ string 常用函数
C++ String常用函数 一,类型别名 size_type 无符号整型 iterator 迭代器类型 const_iterator 只读迭代器 reverse_iterator 逆序迭代器 con ...
- android:整理drawable(shapdrawable)(二)
前言 bitmapdrawable 与nithpathdrawable 完结,接下来是shapedrawable. shapedrawable是使用频率最高的drawable 可见其重要性. shap ...
- 自己动手搭环境—unit 1、Struts2环境搭建
1.web.xml中增加Struts2配置 <filter> <filter-name>struts2</filter-name> <filter-class ...
- 【译】如何使用Vue过渡效果来提升用户体验
在Vue应用中添加过渡效果是一个可以使你的项目感觉更专业的简单方法.通过提升用户体验,可以使你的网站留住更多的用户以及提高转化率. 只需要简单的处理就可以获得巨大的回报,何乐而不为? 在这个指南中,我 ...
- IDEA 公司推出新字体,极度舒适~
这几天炒得沸沸扬扬的 Intellij IDEA 公司 JetBrains 推出了一种新字体:JetBrains Mono,据说它是专为开发人员设计的,下面栈长带大家一起来吃个瓜. JetBrains ...
- Qt Installer Framework翻译(3-0)
终端用户使用流程 离线安装和在线安装对终端用户来说是相似的.安装程序将你的应用程序和维护工具一起打包,该工具由包管理器,更新程序和卸载程序组成.用户可以使用维护工具来添加,更新和删除组件.维护工具连接 ...
- 开发者必须要了解的架构技术趋势:Service Mesh
内容概要 Service Mesh 是干啥的?解决了什么问题? Service Mesh 的特性 Service Mesh 的主流实现有哪些? 1. Service Mesh 是什么? 简单来讲,Se ...
- IO系统-基本知识
注:本文档主要整理了Linux下IO系统的基本知识,是整理的网易云课堂的学习笔记,老师讲得很不错,链接如下:Linux IO系统 1.Linux操作系统的基本构成 内核:操作系统的核心,负责管理系统的 ...