Algorithm
本周选择的算法题是:Remove Nth Node From End of List
规则如下:
Given the head
of a linked list, remove the nth
node from the end of the list and return its head.
Follow up: Could you do this in one pass?
Example 1:
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]
Example 2:
Input: head = [1], n = 1
Output: []
Example 3:
Input: head = [1,2], n = 1
Output: [1]
Constraints:
- The number of nodes in the list is
sz
. 1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
Solution
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
root = ListNode(0, head)
fast, slow = root, root
for _ in range(n+1):
fast = fast.next
while fast:
slow, fast = slow.next, fast.next
slow.next = slow.next.next
return root.next
Review
How a one line change decreased our clone times by 99%
Pinterest 工程效率团队的分享,描述他们在 CI Pipeline 中的一次优化行为。
因为我们的代码管理也是采用的 Monorepo 的方式,也面临着代码库尺寸不断增大的情况,所以类似的文章很有借鉴价值。
我也是通过这篇文章才知道还有一个 The Refspec 配置,任何优化,都得深入理解系统运作的原理,才能找到性能的瓶颈。
Tip
Python 3.5+ 合并字典:
dict1 = { 'a': 1, 'b': 2 }
dict2 = { 'b': 3, 'c': 4 }
merged = { **dict1, **dict2 }
print (merged)
# {'a': 1, 'b': 3, 'c': 4}
Share
Start with Why 是几年前的一篇 TED 演讲,讲述卓越的领导力是如何养成的,里面有一个称为黄金圈法则的概念:
我对这类概念有一些自己的理解过程,是几个「Why」:
- 它对我的生活会有什么帮助
- 它对我的选择会有什么帮助
或者用一个最直观的维度,就是体现在收入上,我们从两个主要的收入来源来看看。
对个人而言,找工作是以时间为货币,买入公司的未来。而选择公司就是选择人,我们总是会选择那些懂得「为什么做」的人,因为只有从这个圆圈出发的人才有能力激励周围的人,我们要追随真正的领袖,不是因为我们必须这样做,而是因为我们愿意。我们跟随具有领袖能力的人,不是为了他们,而是为我们自己。
对老板而言,找到合适的人很重要,如果你雇佣某人只是因为他能够做这份工作,他们就只是为你开的工资而工作。这没什么不对,但是在激烈的商业社会中只是这样是不够的,这是缺乏战斗力的团队。
敏捷专家 Mishkin Berteig 曾对团队做出过一个说明:
团队和一群人是有本质区别的,如果没有共同的工作理念和文化,而是各自在做各自的工作,那么不能称为是一个团队。自组织的第一要素就是必须有一个团队而不仅仅是一群人。其次,对团队共同的工作理念与文化形成基本的认识和理解。团队内形成规矩,这些规矩是不言而喻的,如果团队成员间能够达成这样的默契,那么才是真正高效的工作团队。最后一个阶段时,团队成员不需要遵从别人的详细指令。团队成员自愿分担不同的工作任务,而不是等别人来告诉他们怎么做。
所以雇佣跟你有共同信念的人,他们会为你付出热血和汗水。《小王子》中也有一个观点与之非常像:
如果你想造一艘船,就不要催着工人们去收集木材,分派工作,发号施令。你应该教会他们的是对无边无际大海的渴望。
— 安托万·德·圣埃克苏佩里,《小王子》
信念也体现在销售上。小米当年的营销“年轻人的第一部智能手机”、“发烧”等词精准的找到了拥有相同信念的用户群体,人们买的不是你的产品,而是你的信念。做公司的目标不是要跟所有需要你的产品的人做生意,而是跟与你有着相同理念的人做生意。
无论是对个人还是对老板,我们都没有直接提到收入,因为最好的收入是在信念践行的过程中额外提供的。