ARTS Week 12

Algorithm

本周的 LeetCode 题目为:160. 相交链表

题目简介:给你两个单链表的头节点 headAheadB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例如下:

输入:
A:    4->1->
            8->4->5
B: 5->0->1->
输出:
8

第一种思路就是使用集合 HashSet,将链表 A 都加入集合中,然后遍历链表 B,检查是否存在于集合中,若存在则表明相交,反之不存在。通过的代码如下:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        HashSet<ListNode> nodeSet = new HashSet<>();
        ListNode curr = headA;
        while (curr != null) {
            nodeSet.add(curr);
            curr = curr.next;
        }
        curr = headB;
        while (curr != null) {
            if (nodeSet.contains(curr)) {
                break;
            } else {
                curr = curr.next;
            }
        }
        return curr;
    }
}

第二种思路就是通过遍历链表,两个指针 pA,pB 分别指向链表 A,B,当 pA 指针遍历到链表 A 结束后,再开始遍历链表 B;同理,当 pB 指针遍历到链表 B 结束后,再开始遍历链表 A。判断 pA 与 pB 是否相等,若相交则返回相交的节点,若不相交则 pA 与 pB 都为 null 时会停止遍历。通过代码如下:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if (headA == null || headB == null) {
            return null;
        }
        ListNode curr1 = headA;
        ListNode curr2 = headB;
        while (curr1 != curr2) {
            curr1 = (curr1 == null) ? headB : curr1.next;
            curr2 = (curr2 == null) ? headA : curr2.next;
        }
        return curr1;
    }
}

Review

本周 Review 的英文文章为:缩短写作的列宽以加快写作速度

作者在这篇文章中分享了自己提高写作效率的技巧,那就是将编辑器的宽度调窄。这样做不仅可以提高写作速度,同时也提高了写作质量。因为越短的列,阅读起来会更快一些,随着阅读速度的提高,写作速度也会得到提高;因为列变短了,不需要频繁的移动眼睛来获取到更多的内容,在编程中,我们也经常设置一个最长列宽,比如 80 个字符,120 个字符等等。值得注意的是,这只是作者一个人的看法,并不代表大家都是这样,作者的技巧并不适用于每个人。

接下来,我也准备将编辑器调窄,试试作者的建议 😃

Tip

sudo 命令会先调用 fork() 创建一个子进程,而后改变用户及权限,最后调用 exec() 来运行执行具体的程序。因为用户即权限发生了变化,这就会导致某些环境变量可能不可用。

Share

每周的 ARTS 已经进入了正轨,同时也慢慢养成了提前准备素材的习惯。现在的 ARTS 基本上是按照分为四个部分写成的,而并不是像过去那样一次性写成的。其实个人很难发现这两种写作方式得到的最终文章的区别,不知道各位读者能不能看出来?但分部分写会降低我的压力,自我感觉一次性写完写出来的并不是很好?

自己未来应该还会分部分写,因为后面打算写一些其他方面的技术文章,单独的一篇文章还是一次性写好为好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值