ARTS Week 14
Jan 27, 2020 ~ Feb 2, 2020
Algorithm
Problem 160.Intersection of Two Linked Lists(相交链表) 题目链接
题目描述:给定两个链表,判断其是否存在相交,若存在则返回相交节点,若不存在则返回 null。假设链表中不存在环路,函数不能破坏链表原有结构。举例,下面的两个链表则为相交链表,相交结点为 9。
1 -> 2 -> 3
\
9 -> 8
/
7
思路1:与上一周的题目类似,可以将其中一个链表中所有结点的地址用一个集合进行保存,接下来便利另一个链表,若其中出现某个结点地址也出现在了集合中,那么说明两个链表相交,若遍历结束也没有出现,则说明两个链表不相交
通过的代码如下
# Solution 1
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
if (headA == None) or (headB == None):
return None
node_id_A = set([])
p = headA
while p != None:
node_id_A.add(id(p))
p = p.next
q = headB
while q != None:
if id(q) in node_id_A:
return ListNode(q.val)
q = q.next
return None
思路2:使用两个指针进行判断。先进行遍历,若两个链表的末尾元素不相同,则说明两个链表必定不相交(注:若相交则末尾元素相同,但是末尾元素相同未必相交!)。假设两个链表相交,那么该如何找到相交元素呢?设两个链表分别为A , B,相交部分为 C,两个指针 p,q 分别先指向 A,B,当遍历链表到末尾时,让 p 指向B,q 指向 A,继续遍历,当 p,q相等时,则说明该节点为开始相交的节点,原因很简单,因为在找到相交的节点时,p 遍历了 len(A) + (len(B) - len(C)) 个元素,q遍历了 len(B) + (len(A) - len(C)) 个元素,二者是相等的。故因此可以找到相交节点。
通过的代码如下
# Solution 2
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
if (headA == None) or (headB == None):
return None
p = headA
q = headB
while p.next != None:
p = p.next
while q.next != None:
q = q.next
if p.val != q.val:
return None
else:
p = headA
q = headB
while p != q:
if p.next == None and q.next != None:
p = headB
q = q.next
elif q.next == None and p.next != None:
q = headA
p = p.next
else:
p = p.next
q = q.next
if p == None:
return None
else:
return ListNode(p.val)
Review
本周继续 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:
- 大师神话(The Guru Myth) 原文链接
在软件行业有许多闻名的大师,但事实上,“大师”也是人类,他们思考问题时的逻辑方法很我们没什么太多区别。只不过因为经验等积累的较多,“大师”可以利用思维捷径和直觉来发现和解决问题。当然,天赋资质方面仍存在差异,但对大多数人来说,这一点并不明显。 - 努力工作没有回报(Hard Work Does not Pay Off) 原文链接
由于编程和软件开发涉及一个连续的学习过程,你始终需要去学习新的知识。比如阅读书籍,参加会议,与其他专业人员交流,尝试新的技术,简化现有工具等。如果你在项目上花费的时间太多了,既无法保证项目的质量,也无法提升自己。 - 使用 bug 追踪器(How to Use a Bug Tracker) 原文链接
一个好的 bug 报告需要三件事:1)如何尽可能的重现该错误,以及指出该错误发生的频率;2)正常运行应该发生/进行什么操作;3)实际上发生了什么。bug 追踪器除了 bug 报告以外,仍需要记录发现者,bug紧急程度,修复 bug 的人,是否完成修复等。 - 通过删除代码来改进代码(Improve Code by Removing It) 原文链接
少即是多,任何项目中有许多不必要的代码,我们可以通过删除这些代码已达到改进的目的。不必要的代码一办出现在哪里呢?最常见的地方便是“无用”的功能,项目中有一些功能,虽然设计时觉得很有用,但实际情况是很少有用户使用,因此这些功能涉及到的代码便可以去除。当然,还有很多冗余的代码分布在算法设计,数据结构的设计等 - 安装程序(Install Me) 原文链接
任何软件都应该编写一份安装说明。对于有GUI的软件,安装过程一般不是很复杂。但对于没有GUI的软件,例如某工具、库等,你应该为其写一个文档来告诉使用者如何安装/使用它。
此外,分享一篇我在 Linux 中国翻译的文章:查看 Linux 系统中进程和用户的内存使用情况
Tips
JavaScript 中 NaN 这个特殊的Number与所有其他值都不相等,包括它自己。唯一能判断NaN的方法是通过isNaN()函数:
NaN === NaN; // false
isNaN(NaN); // true
Sharing
我本周试着参与了一下上周提及的 Linux 中国翻译计划,发现参加起来还是比较容易的,可供选择的题目也不少,每天也有新的题目入选,维护者也比较积极,每天都会处理新的PR。普通人的参与方式是作为译者,想将自己准备翻译的英文文章中一些信息进行修改并提交PR,等翻译好更新文章内容,再次提交新的PR,总结一下,就是翻译一篇文章共需要提交两个PR。等翻译的文章经过校对以后,便会公开发布。在 Review 部分中,我分享了我自己翻译的第一篇文章。
ARTS Week 14的更多相关文章
- ARTS 1.14 - 1.18
期望: 每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 Two Sum IV - In ...
- ARTS 12.10 - 12.14
从陈皓博主的专栏里学到一个概念,争取可以坚持下去: 我在我的读者群中推荐出 ARTS 的任务,每个人每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Sha ...
- 【ARTS】01_08_左耳听风-20181231~20190106
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_22_左耳听风-201900408~2019004014
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- ARTS Week 6
Dec 2, 2019 ~ Dec 8, 2019 Algorithm 从本周开始,由于要涉及某一算法,但我又有选择困难症.所以我决定在Leetcode刷题的,用ARTS中的算法部分来记录本周值得记录 ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
- Ubuntu 14.04中Elasticsearch集群配置
Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...
- IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)
首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...
- Angular2 Hello World 之 2.0.0-beta.14
公司现在采用angualrjs开发一些web应用,采用的是angular1,现在angular2已经差不多了,听说最近rc6已经出来了……其实感觉好慢啊!之前也做过一些anglar2的例子,但是没有记 ...
随机推荐
- Dockerfile文件记录(用于后端项目部署)
Dockerfile文件记录(用于后端项目部署) 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统(敏感信息都进行了处理) 此文结合另一篇博客共同构成后端服 ...
- 《图解机器学习-杉山将著》读书笔记---CH1
CH1 什么是机器学习 重点提炼 机器学习的种类: 常分为:监督学习.无监督学习.强化学习等 监督学习是学生从老师那获得知识,老师提供对错指示 无监督学习是在没有老师的情况下,学生自习 强化学习是在没 ...
- AES中ECB模式的加密与解密(Python3.7)
本文主要解决的问题 本文主要是讲解AES加密算法中的ECB模式的加密解密的Python3.7实现.具体AES加密算法的原理这里不做过多介绍,想了解的可以参考文末的参考链接. 主要解决了两个问题: 在P ...
- kuangbin专题 专题九 连通图 Strongly connected HDU - 4635
题目链接:https://vjudge.net/problem/HDU-4635 题目:有向图,给定若干个连通图,求最多还能添加几条边,添完边后,图仍然要满足 (1)是简单图,即没有重边或者自环 (2 ...
- 「1.0」一个人开发一个App,小程序从0到1,起航了
古有,秦.齐.楚.赵.魏.韩.燕七国争雄:今有,微信.QQ.百度.支付宝.钉钉.头条.抖音七台争霸.古有,白起.李牧.王翦.孙膑.庞涓.赵奢.廉颇驰骋疆场:今有程序员1,程序员2,程序员3…编写代码. ...
- Gitlab应用——开发人员fetch分支,合并到master主分支申请
创建开发仓库 打开git Bash,删除之前root管理创建的仓库目录 rm -rf admin-test 选择项目进行拷贝 克隆 # git -c http.sslVerify=false c ...
- 用ModelAndView返回视图结果返回的是对应RequestMapping拼接的路径
今天,遇到一个贼坑的问题,就是我明明可以将逻辑视图名视图存入ModelAndView,结果返回的页面信息是RequestMapping拼接的视图解析路径,最后经过检查多遍代码,发现原来是ModelAn ...
- 《利用python进行数据分析》——Numpy基础
一.创建数组 1.创建数组的函数 array:将输入数据(列表.元组.数组或其他序列类型)转换为ndarray,可用dtype指定数据类型. >>> import numpy as ...
- python 进程信号量
1.概念 信号量和锁相似,锁同一时间只允许一个对象(进程)通过,信号量同一时间允许多个对象(进程)通过 2.应用场景 多线程,并规定数量 3.格式: 导入信号量模块 实例化信号量对象,可以规定信号量的 ...
- # 团队项目-Beta冲刺2(七个小矮人)
团队项目-Beta冲刺2(七个小矮人) 一.格式描述 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScien ...