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 来持续跟进,尝试通过自己的实践来得到结果,有一句俗话“没吃过猪肉,还没见过猪跑么”,事实证明还真不一定,见过猪跑的就是比没见过的有更深刻的理解。
亲历过程比得到结果更重要。