Algorithm
本周选择的算法题是:Maximum Length of Repeated Subarray。
规则
Given two integer arrays nums1
and nums2
, return the maximum length of a subarray that appears in both arrays.
Example 1:
Input: nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
Output: 3
Explanation: The repeated subarray with maximum length is [3,2,1].
Example 2:
Input: nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
Output: 5
Constraints:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 100
Solution
impl Solution {
pub fn find_length(nums1: Vec<i32>, nums2: Vec<i32>) -> i32 {
let (mut dp, mut pre_dp) = (vec![0; nums2.len()+1], vec![0; nums2.len()+1]);
let mut ans = 0;
for i in 1..=nums1.len() {
for j in 1..=nums2.len() {
dp[j] = if nums1[i-1] == nums2[j-1] { pre_dp[j-1]+1 } else { 0 };
ans = ans.max(dp[j]);
}
std::mem::swap(&mut pre_dp, &mut dp);
}
ans
}
}
Review
No surprises, Rust will be in Linux 6.1
Rust 进入 Linux 生态背后的故事。
Rust 已成为第二个 “Linux 语言”,相比 C 有几个优点,但最大优点的是内存安全,不再敖述。除了语言本身的特点外,Torvalds 提到了最吸引他的原因:“我们正变得越来越老(指 Linux 的维护团队),而且我们的想法也开始有点落后,在内核中引入 Rust 可以吸引新的开发人员为内核工作,以此激发创新。”
Linux 6.1 是引入 Rust 的第一个正式发行版,在该版本中,Rust 只是核心基础设施的一部分,并没有落地到面向用户的使用场景上,即使如此,也算是 That’s one small step for Linux, one giant leap for Rust。
Tip
Markwhen: 一个 text-to-timeline 工具,以 markdown 为 DSL,实现纯文本输入到甘特图输出,看起来不错。
Share
建立 “个人顾问委员会”
经营一家公司和经营人生有区别吗?有,但区别恐怕没那么大。
公司为客户提供产品,人也要对外提供知识、专业和经验作为产品;公司想要永续经营,个人也可以留下物质或非物质文化遗产;公司和个人都需要一个明确的定位,然后坚持不懈地经营它,也就是专注力;公司和个人都会面临各种选择,要懂得取舍,也就是决策力;…
公司可以建立委员会或董事会提供发展建议,个人是不是也可以借助这种方式完善自身呢?不仅公司会在发展过程中遇到各种各样的问题,人也在成长过程中不断变化,每隔 10 年我们都会成为不同的自己,就像从孩子到父母一样,学会改变自己的角色,才能避免成为阻碍个人/公司发展的瓶颈。
建立 “个人顾问委员会” 就是帮助管理风险和增加行动的潜在优势:
- 与聪明人交谈,站在巨人的肩膀上,补充知识空白
- 从别人的错误而非自己的错误中学习没那么痛苦
- 通过定期汇报进度,了解如何才能做得更好
建立方式:
- 与领先1年、2年、5年的人交流,学习不同而重要的事,从一个阶段变化到下一阶段往往是悄无声息的
- 留出时间和空间进行反思和听取反馈
- 鼓励他人建立学习文化
即使见不到最优秀的人,也可以通过阅读最优秀的书实现交流,许多伟大的想法早就已经在书中揭露过了。