ARTS-2

ARTS

也就是 Algorithm、Review、Tip、Share 简称ARTS

  1. 每周至少做一个 leetcode 的算法题
  2. 阅读并点评至少一篇英文技术文章
  3. 学习至少一个技术技巧
  4. 分享一篇有观点和思考的技术文章

Algorithm

反转一个单链表。

示例:

1
2
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

迭代方式

从入参head开始为current,假设前置节点为null,然后在迭代中通过变量逐个进行替换。一开始在纸上画图让思路清晰的方式挺不错,想着如果有对leetcode题目做动画的就更好了,google了leetcode animation还真有,图片来自:https://github.com/MisterBooo/LeetCodeAnimation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while(cur != null){
ListNode curTemp = cur.next;
cur.next = pre;
pre = cur;
cur = curTemp;
}
return pre;
}
}

递归方式

1
2
3
4
5
6
7
8
9
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null) return head;
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
}

Review

https://medium.freecodecamp.org/here-are-examples-of-everything-new-in-ecmascript-2016-2017-and-2018-d52fa3b5a70e

文章描述了ECMAScript 2016/17/18的特性示例,方便回顾和查阅。

Tip

部署静态资源有多种方式,一般起一个静态服务器就可以解决,随着各云厂商的对象存储支持静态服务器,支持域名/https等一条龙服务,将资源直接推到桶里是非常方便的一件事,亚马逊的s3本身支持终端工具aws-cli可以很方便操作资源。早些时候我使用腾讯的cos,他们没有支持终端命令行工具,提了工单还是得调SDK自己倒腾,写了一个cos-manager 配合CI/CD工作起来方便很多。

Share

套路解决递归问题

之前自己解题时画图总是习惯绕进循环,反而先理清递归要做的事情更容易解决。在leetcode评论中看到这位小哥的思路总结,三步走的的办法解决递归的题确实不错。

  • 整个递归的终止条件。
  • 一级递归需要做什么?
  • 应该返回给上一级的返回值是什么?