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的更多相关文章

  1. Fastjson 专题

    JSONObject.toJSONString(Object object, SerializerFeature... features) SerializerFeature有用的一些枚举值 Quot ...

  2. 为什么fastjson字段为null时不输出空字符串?

    为什么fastjson字段为null时不输出空字符串? Map < String , Object > jsonMap = new HashMap< String , Object& ...

  3. arts打卡13周

    算法: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 12. 113. 214. 12115. 1112211 被读作  "one 1" ...

  4. 【ARTS】01_19_左耳听风-20190318~20190324

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  5. 【ARTS】01_08_左耳听风-20181231~20190106

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. 【ARTS】01_44_左耳听风-201900909~201900915

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. 【ARTS】01_22_左耳听风-201900408~2019004014

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  8. TechEmpower 13轮测试中的ASP.NET Core性能测试

    应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此.此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚.在选择框架时, ...

  9. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

随机推荐

  1. hadoop参数传递实例

    要求: 根据输入文件中的信息,计算出某几个字符串出现的个数 输入文件格式:xxx,xxx,xxx,xx,x,x,xxx,x,x,xx,x,x,x,x,x,x,x, 输出文件:xx    10 xx   ...

  2. C++ | C++ 基础知识 | 结构、联合与枚举

    1. 结构 1.0 结构 数组是相同类型元素的集合,相反,struct 是任意类型元素的集合. 代码例子: struct Address { const char* name; int number; ...

  3. TieredMergePolicy

    setFloorSegmentMB多少MB一个层级,在此区间的segment分为一个floor. setMaxMergeAtOnce一次merge多少个segment. setSegmentsPerT ...

  4. 数据库的SQL基本用法 创建 删除 查询 修改

    1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname 3.说明:备份sql server--- 创建 备份数据的 ...

  5. 小白学 Python 爬虫(40):爬虫框架 Scrapy 入门基础(七)对接 Selenium 实战

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  6. vnpy源码阅读学习(3):学习vnpy的界面的实现

    学习vnpy的界面的实现 通过简单的学习了PyQt5的一些代码以后,我们基本上可以理解PyQt的一些用法,下面让我们来先研究下vnpy的UI部分的代码. 首先回到上一节看到的run.py(/vnpy/ ...

  7. 倍增LCA模板

    //https://www.luogu.org/problemnew/show/P3379#include<bits/stdc++.h> #define maxn 500010 #defi ...

  8. java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍

    pinyin pinyin 是 java 实现的高性能中文拼音转换工具. 变更日志 创作目的 想为 java 设计一款便捷易用的拼音工具. 如何为 java 设计一款高性能的拼音转换工具 pinyin ...

  9. Hive 这些基础知识,你忘记了吗?

    Hive 其实是一个客户端,类似于navcat.plsql 这种,不同的是Hive 是读取 HDFS 上的数据,作为离线查询使用,离线就意味着速度很慢,有可能跑一个任务需要几个小时甚至更长时间都有可能 ...

  10. 小白学Java:奇怪的RandomAccess

    目录 小白学Java:奇怪的RandomAccess RandomAccess是个啥 forLoop与Iterator的区别 判断是否为RandomAccess 小白学Java:奇怪的RandomAc ...