CodingTour
ARTS #68 | 持续成长

Algorithm

本周选择的算法题是:Merge Intervals

规则如下:

Given a collection of intervals, merge all overlapping intervals.

Example 1:

Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

Constraints:

  • intervals[i][0] <= intervals[i][1]

Solution

题目没有说明输入数据的顺序,所以需要做一次排序:

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        ans = []
        for interval in sorted(intervals, key=lambda interval: interval[0]):
            if ans and interval[0] <= ans[-1][1]:
                ans[-1][1] = max(ans[-1][1], interval[1])
            else:
                ans.append(interval)
        return ans

Review

Inside a Hello World executable on OS X

关于 Mach-O 的各个 load command 作用解释。

整体内容比较干,过于枯燥,不太容易理解,不过可以作为索引工具来使用,在静态分析、逆向上有实践场景。

Tip

Python 中的 lambda 实现方式可以认为是简化版的单行函数,用 dis 模块查看相同功能对应的 lambda 和函数版本:

from dis import dis

flambda = lambda a, b: a + b

def ffunction(a, b):
    return a + b

dis(flambda)
print("-------------")
dis(ffunction)

可以看出它们产生的字节码是完全一样的。

不同的 Python 解释器可能会有差异

Share

最近面临了一次很重要的职场抉择,它源于我的一个执念和情怀,我想很多人可能和我一样,想通过某种方式证明自己的能力,便于更清楚了解自己的实力,如果长期得不到满足就会产生焦虑,然而焦虑的方向一定不能错,不能为了如何证明而焦虑,而是如何保持自己的竞争力,持续成长,这个方向才是值得焦虑的方向。

就像有人会焦虑自己的年龄到30、35了一样,其实年龄本身有什么错呢?焦虑能改变年龄么?不如正视自己的短板,焦虑一下自己XX技术不好这件事。

在这次的工作机会中有一些吸引我的挑战,其中最吸引我的工作挑战有:

  • 工具链相关
    • 大中型团队代码管理方式
    • 大中型团队协同开发工作流
  • 工程相关
    • 商业化的热修复方案
    • 技术方案完整落地/推进流程
    • 版本迭代/跟踪流程
    • 大型项目中的真实组件化方案

我会把这些挑战作为我个人的 OKR 来持续跟进,尝试通过自己的实践来得到结果,有一句俗话“没吃过猪肉,还没见过猪跑么”,事实证明还真不一定,见过猪跑的就是比没见过的有更深刻的理解。

亲历过程比得到结果更重要。