Bootstrap

2022 ARTS|Week 03——生活不奖赏心血来潮,也不奖赏你赋予的特殊含义某一天,无论日子过得如何,不要停止。

ARTS是极客时间推出的一个,通过100天的关于Algorithm、Review、Tip和Share的刻意训练,来实现进阶。

1. Algorithm

要求:每周至少做一个LeetCode算法题,为了编程训练和学习。

实际时间花费:10分钟

算法题目

算法题链接:

给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。

题目分析

题目的理解:题目的本质,实际上寻找两根垂直线所组成的矩形的面积的最大值。其中,垂直线 i 的有两个端点组成,两个端点分别为 (i, ai) 和 (i, 0)。这是数学意义上的抽象的线,没有实际的宽度和高度。第一次理解的时候,我以为还要将整体矩形的面积减去每条线所组成的黑色的矩形的面积(如图所示)。

方案1:暴力解法,双重循环,找到所有可能的垂直线的组合方式,将其组成的矩形值记录,并求出最大值。

时间复杂度:O(n2)空间复杂度:O(1)

方案2:暴力解法,双指针,一个指针指向最前,一个指向最后,比较两个垂直线的高低,低的一方向高的一方移动(为什么不是高的向低的移动:因为面积=高度(两相比较的低的一方)* 宽度(两条线的距离),高的向低的一方移动,面积不会有增大的改变;而低的向高的移到,虽然宽度减少,但有可能高度增加使得总体面积增加)

时间复杂度:O(n)空间复杂度:O(1)

代码

通过Java来对算法进行实现,之前做过。

public class Solution {
    public int maxArea(int[] height) {
        int maxarea = 0, i = 0, j = height.length - 1;
        while (i < j) {
            maxarea = Math.max(maxarea, Math.min(height[i], height[j]) * (j - i));
            if (height[i] < height[j])
                i++;
            else
                j--;
        }
        return maxarea;

2. Review

阅读并点评至少一篇技术文章,通过英文技术文章来学习英文。

实际时间花费:60分钟

文章链接:

我的点评

3. Tip

学习至少一个技术技巧,为了总结和归纳日常工作中遇到的知识点。

实际时间花费:25分钟

技巧

git log:查看提交历史(当前分支)
git log -all:查看所有分支提交历史
git log -p -2:-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
--word-diff:选项,显示单词层面的变化,在书籍、论文这种很大的文本文件上进行对比时,有作用。
git log --stat:--stat选项,仅显示简要的增改行数统计
git log --pretty:指定使用完全不同于默认格式的方式展示提交历史,默认为short
    git log --pretty=short
    git log --pretty=full
    git log --pretty=fuller
    git log --pretty=oneline 将每个提交放在一行显示,这在提交数很大时非常有用
    git log --pretty=format:"%h - %an, %ar : %s":简短哈希,作者名称,修订日期(按多久以前的方式显示),提交信息
git log --oneline:将每个提交放在一行显示,commit信息显示前6位,--oneline 等同于 --pretty=oneline --abbrev-commit 的写法
git log --oneline --graph:--graph,形象地展示了每个提交所在的分支及其分化衍合情况
git log --since=2.weeks:--since, --after,仅显示指定时间之后的提交。
git log --until="2008-11-01":--until, --before 仅显示指定时间之前的提交。
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \--before="2008-11-01" --no-merges --  t/  :作者,-t路径下

我的学习

4. Share

分享一篇有观点和思考的技术文章,为了建立影响力、输出价值观。

实际时间:40分钟

文章链接:

  • 的文章——

  • 张潇雨的

自己之前的文章:

我的学习和反思

在我看来,「新一年」,和每一年、每一天、每一个时刻都没有任何不同,都是从一个刹那到下一个刹那流逝的结果。而不论你想做什么,想成为什么,都不需要等到新一年,或者等到任何一个时刻,现在就可以开始。——张潇雨

不论世界如何运转、环境怎样变迁,如果我们能始终泰然处之、观心观己,让发生的事情、产生的情绪穿过自己的身体,那怎样的变化都会成为一种不变,也让我们更加接近真理。——张潇雨

最后一件我们经常忘掉的事,就是能定义我们是谁的人只有我们自己,而不是任何别的东西。不要把评价自我和解释世界的权利让渡给他人,每个人的存在与被爱的权利都是顶天立地的,不需要任何理由的。——张潇雨