CodingTour
ARTS #173

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年的人交流,学习不同而重要的事,从一个阶段变化到下一阶段往往是悄无声息的
  • 留出时间和空间进行反思和听取反馈
  • 鼓励他人建立学习文化

即使见不到最优秀的人,也可以通过阅读最优秀的书实现交流,许多伟大的想法早就已经在书中揭露过了。